【问题标题】:Best way to find the first non-null occurrence of each column for each index?找到每个索引的每列的第一个非空出现的最佳方法?
【发布时间】:2019-04-25 19:38:25
【问题描述】:

我有一个如下所示的数据框:

ItemID    Attribute    CostGrade    RelatedTo
---------------------------------------------
01A       tya        
01A       van
01A                     03a
01A                                 03B
01A                     02i
01A       lof           
01A                     o9g oa      
01A                                 07N
02B       ova           
02B                     39b         
02B       aga
04A       val
04A                     rg0
04A                     va0
04A       hla

如您所见,对于每一行,实际上只有 2 个值:ItemID 和 Attribute、CostGrade 或 RelatedTo 的非空值。

我想将 ItemID 转换为唯一索引,以便每个 ItemID 只有一行,并取任意行(不管是哪一行,可以是第一个或最后一个或随机的,因为它们都是有效的并且组合是无关)每列的非空值。所需的输出如下所示:

ItemID    Attribute    CostGrade    RelatedTo
---------------------------------------------
01A       tya          03a          03B
02B       ova          39b          NaN
04A       hla          rg0          NaN

任何帮助将不胜感激!

【问题讨论】:

  • 那些空值是熊猫识别的null值,None,还是空字符串? ''?你可能需要df.groupby('ItemID').first()
  • 它显示为 NaN,所以我相信 null。

标签: python-3.x pandas dataframe


【解决方案1】:

试试groupby、bfill和iloc:

df.groupby('ItemID', as_index=False).apply(lambda x: x.bfill().iloc[0])

输出:

  ItemID Attribute CostGrade RelatedTo
0    01A       tya       03a       03B
1    02B       ova       39b       NaN
2    04A       val       rg0       NaN

【讨论】:

  • df.bfill() 单独是不行的。在示例数据中,如果 ItemID= 04A 的 RelatedTo 中的任何一个不为 NULL,则它将填充到 itemID=02B
  • jxc 是正确的,bfill 方法不起作用,但是使用 groupby 和 iloc 的第二个方法起作用了。非常感谢!
【解决方案2】:

我认为这将满足您的需求:

# ...if it's not already really NaN, do this
#import numpy as np
#df = df.replace('', np.nan)

df.groupby('ItemID').apply(lambda x: x.fillna(method='bfill').fillna(method='ffill')).drop_duplicates(subset='ItemID')

向后和向前进行填充应确保如果该组中有任何东西,您会得到一些东西。

【讨论】:

    猜你喜欢
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    • 2015-11-04
    • 2019-08-11
    • 2017-08-17
    • 2021-06-18
    相关资源
    最近更新 更多