我有一个这样的数据框
dummy = pd.DataFrame([
('01/09/2020', 'TRUE', 'FALSE'),
('01/09/2020', 'TRUE', 'TRUE'),
('02/09/2020', 'FALSE', 'TRUE'),
('02/09/2020', 'TRUE', 'FALSE'),
('03/09/2020', 'FALSE', 'FALSE'),
('03/09/2020', 'TRUE', 'TRUE'),
('03/09/2020', 'TRUE', 'FALSE')], columns=['date', 'Action1', 'Action2'])
Run Code Online (Sandbox Code Playgroud)
我应用了 group by、sum 和 count 等,但没有任何效果对我有用,因为我必须聚合多个列,而且我不想将表拆分为多个数据框并单独解析并合并为一个,有人可以提出建议吗聪明的方法来做到这一点。
虚拟 df 中的 True 和 False 是字符串,您可以将它们转换为 int 和 sum
dummy.replace({'TRUE':1,'FALSE':0}).groupby('date',as_index = False).sum()
date Action1 Action2
0 01/09/2020 2 1
1 02/09/2020 1 1
2 03/09/2020 2 1
Run Code Online (Sandbox Code Playgroud)
你也可以试试:
dummy.set_index(['date']).eq('TRUE').sum(level='date')
Run Code Online (Sandbox Code Playgroud)
输出:
Action1 Action2
date
01/09/2020 2 1
02/09/2020 1 1
03/09/2020 2 1
Run Code Online (Sandbox Code Playgroud)
任何看到这个答案的人都应该看看@QuangHoang或@Vaishali的答案
,他们是更好的答案。我无法控制OP的选择,但你应该对这些答案投赞成票。
dummy.iloc[:, 1:].eq('TRUE').groupby(dummy.date).sum()
Action1 Action2
date
01/09/2020 2 1
02/09/2020 1 1
03/09/2020 2 1
Run Code Online (Sandbox Code Playgroud)
修复您的数据框,使其具有实际True/False值
from ast import literal_eval
dummy = dummy.assign(**dummy[['Action1', 'Action2']].applymap(str.title).applymap(literal_eval))
Run Code Online (Sandbox Code Playgroud)
然后使用groupby
dummy.groupby('date').sum()
Action1 Action2
date
01/09/2020 2 1
02/09/2020 1 1
03/09/2020 2 1
Run Code Online (Sandbox Code Playgroud)