【问题标题】:Subset data by group within pandas dataframe在熊猫数据框中按组分组数据
【发布时间】:2019-10-14 05:41:51
【问题描述】:

我需要使用组和三个条件规则对数据框进行子集化。如果在一个组中 Value 列中的所有值都没有,我需要保留该组的第一行。如果在一个组中 Value 列中的所有值都不是无,我需要保留所有值。如果在一个组中,Value 列中的某些值是 none 而其他不是 none,我需要删除所有没有的行。列 Region 和 ID 一起定义了数据框中的唯一组。

我的第一种方法是将数据框分成两个块。第一个块是组中所有空值的行。第二块是其他一切。对于组的行包含所有空值的数据块,我将使用按组的累积行数创建一个行号,并查询累积计数 = 1 的行。对于第二个块,我将删除 Value 为的所有行空值。然后我会附加数据框。

示例源数据帧

dfInput = pd.DataFrame({
'Region':     [1, 1, 2, 2, 2, 2, 2],
'ID':     ['A', 'A', 'B', 'B', 'B', 'A', 'A'],
'Value':[0, 1, 1, None, 2, None, None],
})

所需的输出数据帧:

dfOutput = pd.DataFrame({
'Region':     [1, 1, 2, 2, 2],
'ID':     ['A', 'A', 'B', 'B', 'A'],
'Value':[0, 1, 1, 2, None],
})

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    只要按照你的逻辑使用groupby

    dfInput.groupby(['Region','ID']).Value.apply(lambda x : x.head(1) if x.isnull().all() else x.dropna()).\
            reset_index(level=[0,1]).sort_index()
    Out[86]: 
       Region ID  Value
    0       1  A    0.0
    1       1  A    1.0
    2       2  B    1.0
    4       2  B    2.0
    5       2  A    NaN
    

    【讨论】:

      猜你喜欢
      • 2021-08-11
      • 2013-02-28
      • 1970-01-01
      • 2017-07-08
      • 2018-01-25
      • 1970-01-01
      • 2018-07-19
      • 2019-05-15
      • 2017-10-17
      相关资源
      最近更新 更多