我有两个 df,例如:
dfA
Out[191]:
a b c d
0 N M 1 3
1 S F 2 4
1 S F 2 4
还有一个这样的:
dfM
Out[192]:
X Y d1 d2 d3
0 N M 0.1 0.2 0.3
1 S F 1.0 2.0 3.0
现在我想合并这两个以获得像这样的 df:
a b c d e
0 N M 1 3 0.1
1 S F 2 4 1.0
1 S F 2 4 2.0
合并后的 df 具有来自 dfM d 列的值,这些列是根据 dfA 行重复的次数填充的。 如何在 python 中执行此操作?
最佳答案
您可以使用cumcount
对于 merge
的辅助计数器列左连接,第二个 DataFrame 被 melt
reshape :
dfA['groups'] = dfA.groupby(['a','b']).cumcount()
dfM1 = dfM.melt(['X','Y'], value_name='e')
dfM1['groups'] = dfM1.groupby(['X','Y']).cumcount()
print (dfM1)
X Y variable e groups
0 N M d1 0.1 0
1 S F d1 1.0 0
2 N M d2 0.2 1
3 S F d2 2.0 1
4 N M d3 0.3 2
5 S F d3 3.0 2
d = {'X':'a', 'Y':'b'}
df = (dfA.merge(dfM1.rename(columns=d), on=['a','b', 'groups'], how='left')
.drop(['variable','groups'],axis=1))
print (df)
a b c d e
0 N M 1 3 0.1
1 S F 2 4 1.0
2 S F 2 4 2.0
关于python - 合并两个不同形状的数据框中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52771623/