使用 GroupBy 合并组内的两个数据框
Posted
技术标签:
【中文标题】使用 GroupBy 合并组内的两个数据框【英文标题】:Merge two dataframes within a group with GroupBy 【发布时间】:2017-12-18 04:09:14 【问题描述】:我有两个数据框,需要根据日期合并它们,但应该分别为每个组 (participant_id
) 进行合并。
df1:
response_date summary epis_mark participant_id
0 2012-01-04 0.0 False 13
1 2012-01-11 0.0 False 13
2 2012-01-19 0.0 False 13
3 2012-01-29 0.0 False 13
4 2012-02-02 0.0 False 13
0 2012-01-02 8.0 True 14
1 2012-01-10 5.0 False 14
2 2012-01-18 2.0 False 14
3 2012-01-24 1.0 False 14
4 2012-01-31 2.0 False 14
0 2012-01-07 4.0 False 17
1 2012-01-11 NaN False 17
2 2012-01-18 4.0 False 17
3 2012-01-25 NaN False 17
4 2012-02-01 NaN False 17
df2:
response_date summary epis_mark participant_id
0 2012-01-04 17.0 True 13
1 2012-01-11 18.0 True 13
2 2012-01-19 16.0 True 13
3 2012-01-29 15.0 True 13
4 2012-02-02 15.0 True 13
0 2012-01-02 12.0 True 14
1 2012-01-10 8.0 True 14
2 2012-01-18 21.0 True 14
3 2012-01-24 19.0 True 14
4 2012-01-31 20.0 True 14
0 2012-01-04 NaN False 17
1 2012-01-11 NaN False 17
2 2012-01-18 NaN False 17
3 2012-01-25 NaN False 17
4 2012-02-01 NaN False 17
我需要获取一个数据帧 (wide
),其中每个 participant_id
的合并是在 response date
上独立完成的。比如:
>> pd.merge(df1[df1.participant_id == i], df2[df2.participant_id == i], on='response_date', how='outer')
但不循环 i
并使用 groupby。
【问题讨论】:
【参考方案1】:我不确定我是否理解正确。
您可以尝试以下方法:
pd.merge(df1, df2, on=['response date', 'participant_id'], how='outer')
【讨论】:
【参考方案2】:合并 两者 response_date
和 participant_id
:
In [75]: pd.merge(df1, df2, on=['response_date', 'participant_id'], how='outer')
Out[75]:
response_date summary_x epis_mark_x participant_id summary_y epis_mark_y
0 2012-01-04 0.0 False 13 17.0 True
1 2012-01-11 0.0 False 13 18.0 True
2 2012-01-19 0.0 False 13 16.0 True
3 2012-01-29 0.0 False 13 15.0 True
4 2012-02-02 0.0 False 13 15.0 True
5 2012-01-02 8.0 True 14 12.0 True
6 2012-01-10 5.0 False 14 8.0 True
7 2012-01-18 2.0 False 14 21.0 True
8 2012-01-24 1.0 False 14 19.0 True
9 2012-01-31 2.0 False 14 20.0 True
10 2012-01-07 4.0 False 17 NaN NaN
11 2012-01-11 NaN False 17 NaN False
12 2012-01-18 4.0 False 17 NaN False
13 2012-01-25 NaN False 17 NaN False
14 2012-02-01 NaN False 17 NaN False
15 2012-01-04 NaN NaN 17 NaN False
【讨论】:
太好了,谢谢!但是,我应该更改合并列的顺序吗?我的意思是,on=['participant_id','response_date']
以确保首先为每个组完成合并?
顺序无关紧要。合并是以一种平等对待所有键的方式完成的——不是通过在一个键之前分组,而是在所有键匹配时将行标识为一个组。跨度>
以上是关于使用 GroupBy 合并组内的两个数据框的主要内容,如果未能解决你的问题,请参考以下文章