我有两个数据框:
第一个:
id time_begin time_end
0 1938 1946
1 1991 1991
2 1359 1991
4 1804 1937
6 1368 1949
... ... ...
第二:
id time_begin time_end
1 1946 1946
3 1940 1954
5 1804 1925
6 1978 1978
7 1912 1949
现在,我想以这样一种方式组合两个数据帧,使我从这两个数据帧中获得所有行。但是由于有时该行将同时出现在两个数据帧中(例如第1行和第6行),因此我想选择两个的最小time_begin和最大的time_end。因此,我的预期结果是:
id time_begin time_end
0 1938 1946
1 1946 1991
2 1359 1991
3 1940 1954
5 1804 1925
4 1804 1937
6 1368 1978
7 1912 1949
... ... ...
我该如何实现?据我所知,普通的连接/合并操作不允许这样做。
答案 0 :(得分:2)
您可以先merge个数据帧,然后将groupby与agg一起使用以选择min(time_begin)和max(time_end)
df1=pd.DataFrame({'id':[0,1,2,4,6],'time_begin':[1938,1991,1359,1804,1368],'time_end':
[1946,1991,1991,1937,1949]})
df2=pd.DataFrame({'id':[1,3,5,6,7],'time_begin':[1946,1940,1804,1978,1912],'time_end':
[1946,1954,1925,1978,1949]})
#merge
df=df1.merge(df2,how='outer')
#groupby
df=df.groupby('id').agg({'time_begin':'min','time_end':'max'})
输出:
答案 1 :(得分:1)
技巧是为每列定义不同的聚合函数:
pd.concat([df1, df2]).groupby('id').agg({'time_begin':'min', 'time_end':'max'})