我想要合并几个数据帧,但问题是没有相同的列,我想只合并特定的行。我将展示一个例子,以便更容易:
MAIN_DF ,我希望所有人都合并到它:
key A B C
0001 1 0 0
0002 1 1 1
0003 0 0 1
DF_1 :
key A B C D
0001 1 0 0 1
0003 0 0 1 0
0004 1 1 1 1
DF_2 :
key C D E F
0004 1 1 0 1
0005 0 0 1 0
0006 1 1 1 1
所以我想将它全部合并到 MAIN_DF ,所以MAIN_DF将是:
key A B C D E F
0001 1 0 0 1 0 0
0002 1 1 1 0 0 0
0003 0 0 1 0 0 0
0004 0 0 0 1 0 1
0005 0 0 0 0 1 0
0006 0 0 0 1 1 1
查看列已更新并添加了新行。
是否可以使用pandas进行,而不需要执行long和slow循环以及if语句?
谢谢
答案 0 :(得分:3)
我认为你需要DataFrame.combine_first
:
MAIN_DF = MAIN_DF.set_index('key')
DF_1 = DF_1.set_index('key')
DF_2 = DF_2.set_index('key')
df = MAIN_DF.combine_first(DF_1).combine_first(DF_2).fillna(0).astype(int).reset_index()
print (df)
key A B C D E F
0 0001 1 0 0 1 0 0
1 0002 1 1 1 0 0 0
2 0003 0 0 1 0 0 0
3 0004 1 1 1 1 0 1
4 0005 0 0 0 0 1 0
5 0006 0 0 1 1 1 1
答案 1 :(得分:1)
以下是groupby
的方法。
import pandas as pd
import numpy as np
df1 = pd.DataFrame([[1, 0, 0],
[1, 1, 1],
[0, 0, 1]], columns=['a', 'b', 'c'], index=[1, 2, 3])
df2 = pd.DataFrame([[1, 0, 0, 1],
[0, 0, 1, 0],
[1, 1, 1, 1]], columns=['a', 'b', 'c', 'd'], index=[1, 3, 4])
df3 = pd.DataFrame([[1, 1, 0, 1],
[0, 0, 1, 0],
[1, 1, 1, 1]], columns=['c', 'd', 'e', 'f'], index=[4, 5, 6])
# combine the first and second df
df4 = pd.concat([df1, df2])
grouped = df4.groupby(level=0)
df5 = grouped.first()
# combine (first and second combined), with the third
df6 = pd.concat([df5, df3])
grouped = df6.groupby(level=0)
df7 = grouped.first()
# fill na values with 0
df7.fillna('0', inplace=True)
print(df)
a b c d e f
1 1 0 0 1 0 0
2 1 1 1 0 0 0
3 0 0 1 0 0 0
4 1 1 1 1 0 1
5 0 0 0 0 1 0
6 0 0 1 1 1 1
答案 2 :(得分:0)
您可以使用concat水平连接所需的数据帧:
import pandas as pd
df = pd.concat([df1,df2], axis=1, verify_integrity=True)
“verify_integrity”参数检查重复项。
点击此处了解有关merge, join and concatenate
的更多信息