Pandas 条件分组
Pandas conditional groupby
我有如下数据框:
df = pd.DataFrame({'col_1': [6ai,6aii,6aii,6b],
'col_2': [1,1,5,1],
'col_3':[True,False,True,False]})
col_1 col_2 col_3
0 6a1 1 True
1 6aii 1 False
2 6aii 5 True
3 6b 1 False
我想在 col_1 上对这个数据帧进行分组,然后仅 select col_3 为 True 的行。在 col_1 中只出现一次值的情况下,我想 select 该行,而不管 col_3 是真还是假。
所以我想要的结果是:
col_1 col_2 col_3
0 6a1 1 True
2 6aii 5 True
3 6b 1 False
我在想我应该使用 groupby,但我不确定。我真的需要一些帮助吗?
您可以使用 groupby().transform('count')
找到恰好出现一次的那些:
df[df['col_3'] | df.groupby('col_1')['col_3'].transform('count').eq(1)]
输出:
col_1 col_2 col_3
0 6ai 1 True
2 6aii 5 True
3 6b 1 False
这是一种方法
df[df.col_3|~df.col_1.duplicated(keep=False)]
Out[344]:
col_1 col_2 col_3
0 6a1 1 True
2 6aii 5 True
3 6b 1 False
我有如下数据框:
df = pd.DataFrame({'col_1': [6ai,6aii,6aii,6b],
'col_2': [1,1,5,1],
'col_3':[True,False,True,False]})
col_1 col_2 col_3
0 6a1 1 True
1 6aii 1 False
2 6aii 5 True
3 6b 1 False
我想在 col_1 上对这个数据帧进行分组,然后仅 select col_3 为 True 的行。在 col_1 中只出现一次值的情况下,我想 select 该行,而不管 col_3 是真还是假。 所以我想要的结果是:
col_1 col_2 col_3
0 6a1 1 True
2 6aii 5 True
3 6b 1 False
我在想我应该使用 groupby,但我不确定。我真的需要一些帮助吗?
您可以使用 groupby().transform('count')
找到恰好出现一次的那些:
df[df['col_3'] | df.groupby('col_1')['col_3'].transform('count').eq(1)]
输出:
col_1 col_2 col_3
0 6ai 1 True
2 6aii 5 True
3 6b 1 False
这是一种方法
df[df.col_3|~df.col_1.duplicated(keep=False)]
Out[344]:
col_1 col_2 col_3
0 6a1 1 True
2 6aii 5 True
3 6b 1 False