如何串联来自熊猫的多个来源的多个数据框

时间:2019-12-10 12:22:12

标签: pandas

我有以下三个数据框。

dummy_data1 = {
        'id': ['1', '2', '3', '4', '5'],
        'Feature1': ['A', 'C', 'E', 'G', 'I'],
        'Feature2': ['B', 'D', 'F', 'H', 'J']}

dummy_data2 = {
        'id': ['1', '2', '6', '7', '8'],
        'Feature1': ['K', 'M', 'O', 'Q', 'S'],
        'Feature2': ['L', 'N', 'P', 'R', 'T']}

dummy_data3 = {
        'id': ['1', '2', '3', '4', '5', '7', '8', '9', '10', '11'],
        'Feature1': [12, 13, 14, 15, 16, 17, 15, 12, 13, 23],
        'Feature2': [12, 13, 14, 15, 16, 17, 15, 12, 13, 23]}

我想将这三个数据帧连接起来,如下所示。

df1 = pd.DataFrame(dummy_data1, columns = ['id', 'Feature1', 'Feature2'])
df2 = pd.DataFrame(dummy_data2, columns = ['id', 'Feature1', 'Feature2'])
df3 = pd.DataFrame(dummy_data3, columns = ['id', 'Feature1', 'Feature2'])
df = pd.concat([df1, df2], ignore_index=True)
df_ = pd.concat([df, df3], ignore_index=True)

我得到的输出如下。

    id Feature1 Feature2
0    1        A        B
1    2        C        D
2    3        E        F
3    4        G        H
4    5        I        J
5    1        K        L
6    2        M        N
7    6        O        P
8    7        Q        R
9    8        S        T
10   1       12       12
11   2       13       13
12   3       14       14
13   4       15       15
14   5       16       16
15   7       17       17
16   8       15       15
17   9       12       12
18  10       13       13
19  11       23       23

现在,我想向合并的数据框中添加一个单独的列,以指示其来源。即我的输出提示如下所示。

    id Feature1 Feature2 source
0    1        A        B   df1
1    2        C        D   df1
2    3        E        F   df1
3    4        G        H   df1
4    5        I        J   df1
5    1        K        L   df2
6    2        M        N   df2
7    6        O        P   df2
8    7        Q        R   df2
9    8        S        T   df2
10   1       12       12   df3
11   2       13       13   df3
12   3       14       14   df3
13   4       15       15   df3
14   5       16       16   df3
15   7       17       17   df3
16   8       15       15   df3
17   9       12       12   df3
18  10       13       13   df3
19  11       23       23   df3

只是想知道如何在熊猫中做到这一点。而且,我还想知道是否可以一行(而不是一个接一个地)对这三个数据帧进行串联。

很高兴在需要时提供更多详细信息。

2 个答案:

答案 0 :(得分:2)

通过DataFrame.assign添加新列,并将所有3个数据帧传递到concat

df = pd.concat([df1.assign(source='df1'), 
                df2.assign(source='df2'), 
                df3.assign(source='df3')], ignore_index=True)
print (df)
    id Feature1 Feature2 source
0    1        A        B    df1
1    2        C        D    df1
2    3        E        F    df1
3    4        G        H    df1
4    5        I        J    df1
5    1        K        L    df2
6    2        M        N    df2
7    6        O        P    df2
8    7        Q        R    df2
9    8        S        T    df2
10   1       12       12    df3
11   2       13       13    df3
12   3       14       14    df3
13   4       15       15    df3
14   5       16       16    df3
15   7       17       17    df3
16   8       15       15    df3
17   9       12       12    df3
18  10       13       13    df3
19  11       23       23    df3

另一个想法是在concat中使用参数键:

df = (pd.concat([df1, df2, df3], keys=('df1','df2','df3'))
        .rename_axis(('source', 'tmp'))
        .reset_index(level=0)
        .reset_index(drop=True))
print (df)
   source  id Feature1 Feature2
0     df1   1        A        B
1     df1   2        C        D
2     df1   3        E        F
3     df1   4        G        H
4     df1   5        I        J
5     df2   1        K        L
6     df2   2        M        N
7     df2   6        O        P
8     df2   7        Q        R
9     df2   8        S        T
10    df3   1       12       12
11    df3   2       13       13
12    df3   3       14       14
13    df3   4       15       15
14    df3   5       16       16
15    df3   7       17       17
16    df3   8       15       15
17    df3   9       12       12
18    df3  10       13       13
19    df3  11       23       23

答案 1 :(得分:1)

import pandas as pd

dummy_data1 = {
        'id': ['1', '2', '3', '4', '5'],
        'Feature1': ['A', 'C', 'E', 'G', 'I'],
        'Feature2': ['B', 'D', 'F', 'H', 'J']}

dummy_data2 = {
        'id': ['1', '2', '6', '7', '8'],
        'Feature1': ['K', 'M', 'O', 'Q', 'S'],
        'Feature2': ['L', 'N', 'P', 'R', 'T']}

dummy_data3 = {
        'id': ['1', '2', '3', '4', '5', '7', '8', '9', '10', '11'],
        'Feature1': [12, 13, 14, 15, 16, 17, 15, 12, 13, 23],
        'Feature2': [12, 13, 14, 15, 16, 17, 15, 12, 13, 23]}

df1 = pd.DataFrame(dummy_data1)
df1['source'] = 'df1'
df2 = pd.DataFrame(dummy_data2)
df2['source'] = 'df2'
df3 = pd.DataFrame(dummy_data3)
df3['source'] = 'df3'

df = pd.concat([df1, df2, df3], axis=0)

输出:

   id Feature1 Feature2 source
0   1        A        B    df1
1   2        C        D    df1
2   3        E        F    df1
3   4        G        H    df1
4   5        I        J    df1
0   1        K        L    df2
1   2        M        N    df2
2   6        O        P    df2
3   7        Q        R    df2
4   8        S        T    df2
0   1       12       12    df3
1   2       13       13    df3
2   3       14       14    df3
3   4       15       15    df3
4   5       16       16    df3
5   7       17       17    df3
6   8       15       15    df3
7   9       12       12    df3
8  10       13       13    df3
9  11       23       23    df3