使用pd.concat时添加标识原始数据帧的列

时间:2018-08-28 20:09:04

标签: python python-3.x pandas

我有一个数据帧字典,如下所示:

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()),则会得到所需的串联,但没有标识列。

谢谢, 杰克

2 个答案:

答案 0 :(得分:3)

concatkeys一起使用

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