我有一个数据框列表。该列表可能包含3个或更多数据帧。每个数据帧中的行数可以彼此不同。数据框看起来如下。
https://wiki.jenkins.io/display/JENKINS/Next+Build+Number+Plugin
我必须遍历列表并根据以下条件从这些列表中创建一个数据帧。
对于上面提到的示例数据帧,结果数据帧应如下所示:
我尝试过合并等,但我无法在Pandas中做到这一点。请帮我解决这个问题。感谢。
答案 0 :(得分:1)
数据输入:
df1=pd.DataFrame({'Line':[1,1,1],'Point':[2,3,4],'Res':[1,2,3]})
df2=pd.DataFrame({'Line':[1,2,3],'Point':[2,3,4],'Res':[1,2,3]})
df3=pd.DataFrame({'Line':[3,3,3],'Point':[4,3,4],'Res':[1,2,3]})
我们使用reduce merge outer
l=[df1,df2,df3]
import functools
functools.reduce(lambda left,right: pd.merge(left,right,on=['Line','Point'],how='outer'), l)
Out[228]:
Line Point Res_x Res_y Res
0 1 2 1.0 1.0 NaN
1 1 3 2.0 NaN NaN
2 1 4 3.0 NaN NaN
3 2 3 NaN 2.0 NaN
4 3 4 NaN 3.0 1.0
5 3 4 NaN 3.0 3.0
6 3 3 NaN NaN 2.0
答案 1 :(得分:1)
使用Wen的数据,首先使用pd.concat
执行连接,然后使用groupby
重新连接。
df_list = [df1, df2, df3]
i = [df.rename(columns={'Res' : 'Res{}'.format(i)}) for i, df in enumerate(df_list, 1)]
df = pd.concat(df_list)\
.groupby(['Line', 'Point'], sort=False)\
.max()\
.reset_index()
df
Line Point Res1 Res2 Res3
0 1 2 1.0 1.0 NaN
1 1 3 2.0 NaN NaN
2 1 4 3.0 NaN NaN
3 2 3 NaN 2.0 NaN
4 3 4 NaN 3.0 3.0
5 3 3 NaN NaN 2.0