Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何根据一组复杂的列条件聚合重复行_Python_Pandas_Dataframe_Pandas Groupby - Fatal编程技术网

Python 如何根据一组复杂的列条件聚合重复行

Python 如何根据一组复杂的列条件聚合重复行,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,我正在使用pandas来探索包含多个重复条目的数据集。例如: import pandas as pd pd.DataFrame({'ID':['001','001','002','002','002','003','003','004','004'], 'a':['Yes','Yes','Yes','No','Yes','Yes','No','No','No'], 'b':['NaN',3,'NaN',5,4,7,'NaN','NaN','Na

我正在使用pandas来探索包含多个重复条目的数据集。例如:

import pandas as pd
pd.DataFrame({'ID':['001','001','002','002','002','003','003','004','004'],
             'a':['Yes','Yes','Yes','No','Yes','Yes','No','No','No'],
             'b':['NaN',3,'NaN',5,4,7,'NaN','NaN','NaN']})

ID  a   b
001 Yes NaN
001 Yes 3
002 Yes NaN
002 No  5
002 Yes 4
003 Yes 7
003 No  NaN
004 No  NaN
004 No  NaN
每个重复的
ID
应组合成一行,在该行中,列的值根据以下规则进行聚合:

  • 如果列中有,
    Yes
    应取代
    No

  • 如果列中存在,则应使用一个数字替换
    NaN
    ,如果存在多个数字,则应选择最大的数字

预期结果是:

ID  a   b
001 Yes 3
002 Yes 5
003 Yes 7
004 No  NaN

我尝试(但失败)创建一个自定义函数,然后使用apply和lambda。然而,我不认为这是正确的方法,因为我看不到这些行操作处理一组重复项的方法。

在用
np.NaN
替换
+
max
字符串后,可以使用
'NaN'
。这特别有效,因为
'Yes'>'No'
返回
True
。为了提高效率,我建议您将序列
a
转换为分类序列或布尔序列

# replace 'NaN' strings with np.nan
df['b'] = df['b'].replace('NaN', np.nan)

# groupby + max, reset index to elevate index to column
res = df.groupby('ID').max().reset_index()

print(res)

    ID    a    b
0  001  Yes  3.0
1  002  Yes  5.0
2  003  Yes  7.0
3  004   No  NaN