【问题标题】:Combine rows and fill NaN values within groups组合行并在组内填充 NaN 值
【发布时间】:2016-05-17 08:52:20
【问题描述】:

我有以下DataFrame

    X   Y   Z   
0   xxx NaN 333 
1   NaN yyy 444     
2   xxx NaN 333     
3   NaN yyy 444 

我正在尝试根据Z column 组合rows 以获得以下信息:

    X   Y   Z   
0   xxx yyy 333 
1   xxx yyy 444 

【问题讨论】:

  • 我认为您的示例已关闭。带有Z = 333 的两行在Y 列中都有NaNZ 列应该是 [333, 333, 444, 444] 吗?

标签: python pandas dataframe


【解决方案1】:

你应该

  1. 按标签列分组,并且
  2. 在每个组内,回填NaN 值,并返回第一行。

例如,

def flatten(g):
    return g.fillna(method='bfill').iloc[0]

df.groupby('Z').apply(flatten).reset_index(drop=True)

【讨论】:

    【解决方案2】:

    对于这个特定的例子,你可以这样做:

    df.fillna(method='ffill').fillna(method='bfill').drop_duplicates()
    
         X    Y    Z
    0  xxx  yyy  333
    1  xxx  yyy  444
    

    不确定您是否正在寻找更通用的东西?

    【讨论】:

      猜你喜欢
      • 2019-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-20
      • 2021-12-25
      • 1970-01-01
      相关资源
      最近更新 更多