我有以下三个数据框。
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
只是想知道如何在熊猫中做到这一点。而且,我还想知道是否可以一行(而不是一个接一个地)对这三个数据帧进行串联。
很高兴在需要时提供更多详细信息。
答案 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