我有一个数据帧字典,如下所示:
test = {'df1':pd.DataFrame({'col1':[3, 5, 1, 4], 'col2':[3, 5, 1, 4]}), 'df2':pd.DataFrame({'col1':[3, 5, 1, 4], 'col2':[3, 5, 1, 4]}), 'df3':pd.DataFrame({'col1':[3, 5, 1, 4], 'col2':[3, 5, 1, 4]}), 'df4':pd.DataFrame({'col1':[3, 5, 1, 4], 'col2':[3, 5, 1, 4]})]
我想连接这些数据帧,但是添加一个新列,该列给出值来自哪个数据帧的“ identity”(字典键名)。如何才能做到这一点?如果执行pd.concat(test.values())
,则会得到所需的串联,但没有标识列。
谢谢, 杰克
答案 0 :(得分:3)
将concat
与keys
一起使用
pd.concat(test.values(),keys=test.keys())
Out[261]:
col1 col2
df1 0 3 3
1 5 5
2 1 1
3 4 4
df2 0 3 3
1 5 5
2 1 1
3 4 4
df3 0 3 3
1 5 5
2 1 1
3 4 4
df4 0 3 3
1 5 5
2 1 1
3 4 4
答案 1 :(得分:3)
执行此操作的一种方法是使用assign
。您可以遍历字典中的所有dfs
,并在进行操作时分配identity
列:
pd.concat([df.assign(identity=k) for k,df in test.items()])
哪个给你:
col1 col2 identity
0 3 3 df1
1 5 5 df1
2 1 1 df1
3 4 4 df1
0 3 3 df2
1 5 5 df2
2 1 1 df2
3 4 4 df2
0 3 3 df3
1 5 5 df3
2 1 1 df3
3 4 4 df3
0 3 3 df4
1 5 5 df4
2 1 1 df4
3 4 4 df4