我有这个数据框:
df:
companycode name address A B C ...
1234 asd qwe,56 Tyh 123 923
1234 asd qwe,56 Zfhs 4828 01992
6472 yui iop,56 Retgh 8484 8484
...
我还有一个看起来像这样的人:
df2:
companycode A B C ...
1234 Jid 4123 141
6472 Low 1312 3234
...
单个公司代码的名称和地址始终相同
我想以一种最终看起来像这样的方式连接或加入,合并或追加它们:
companycode name address A B C ...
1234 asd qwe,56 Tyh 123 923
1234 asd qwe,56 Zfhs 4828 01992
6472 yui iop,56 Retgh 8484 8484
1234 asd qwe,56 Jid 4123 141
6472 yui iop,56 Low 1312 3234
...
由于单个公司代码的名称和地址总是相同的,所以基本上我想在轴= 0中用df连接df2,并从原始df的公司代码中将这个名称和地址拉到这个新行。写作相当混乱,但我认为它在视觉上效果更好。
任何想法我怎么能这样做?
答案 0 :(得分:3)
pd.concat
后跟groupby
操作应该这样做。
df = pd.concat([df1, df2], 0, ignore_index=True)\
.groupby('companycode').ffill()
df
A B C address companycode name
0 Tyh 123 923 qwe,56 1234 asd
1 Zfhs 4828 1992 qwe,56 1234 asd
2 Retgh 8484 8484 iop,56 6472 yui
3 Jid 4123 141 qwe,56 1234 asd
4 Low 1312 3234 iop,56 6472 yui
ignore_index=True
设置为在连接时创建新索引NaN
的列中留下df2
以前不存在的值groupby
执行companycode
操作,然后ffill
,使用同一组中的正确值填充NaN
个 GID UID <br>
------------ ----------------------
178175721842183084 INC 1121035756
。 答案 1 :(得分:0)
对于那些使用SQL-mindsets的人,请考虑merge
concat
(JOIN
UNION
}:
mdf = df1[['companycode', 'name', 'address']]\
.merge(df2, on='companycode').drop_duplicates()
finaldf = pd.concat([df1, mdf]).reset_index(drop=True)
print(finaldf)
# companycode name address A B C
# 0 1234 asd qwe,56 Tyh 123 923
# 1 1234 asd qwe,56 Zfhs 4828 1992
# 2 6472 yui iop,56 Retgh 8484 8484
# 3 1234 asd qwe,56 Jid 4123 141
# 4 6472 yui iop,56 Low 1312 3234