我有几个同名的数据框。每个数据帧都有一行和两列。一列在所有数据框中都是通用的。我想让他们在一起。假设数据帧的名称相同。我没有计划将它们的名称彼此不同,因为它们的名称太多了,我只是将其中的一些放在这里。有什么办法可以让我加入他们并生成下面提到的所需输出?
以下是数据框:
col1 col2_4
0 1 2
col1 col2_9
0 1 10
col1 col2_1
0 1 12
col1 col2_3
0 1 5
输出:
col1 col2_4 col2_9 col2_1 col_3
0 1 2 10 12 5
代码:
group = df.groupby([randomcolumnname])
for name, groups in group:
#do some stuff for groups
print(groups)
#I want to join the groups dataframes after this line(some groups dataframes are given above)
谢谢!
答案 0 :(得分:0)
我相信您需要left join
merge
,并按col1
列列出DataFrames:
dfs = [df1, df2, df3, df4]
from functools import reduce
df = df_final = reduce(lambda left,right: pd.merge(left,right,on='col1', how='left'), dfs)
print (df)
col1 col2_1 col2_2 col2_3 col2_4
0 1 2 10 12 5
或者为outer join
通过set_index
和concat
创建索引:
df = pd.concat([x.set_index('col1') for x in dfs], axis=1).reset_index()
print (df)
col1 col2_1 col2_2 col2_3 col2_4
0 1 2 10 12 5
编辑:
我认为最好将自定义函数与GroupBy.apply
结合使用:
def func(x):
print (x)
#do some stuff for groups
return x
group = df.groupby([randomcolumnname]).apply(func)
如果不可能,则不使用DataFrames:
dfs = []
group = df.groupby([randomcolumnname])
for name, groups in group:
#do some stuff for groups
print(groups)
dfs.append(groups)