简体   繁体   English

合并两个具有不同形状的数据框中的列

[英]Merge columns from two data frame with different shapes

I have two df such as these: 我有两个像这样的df:

  dfA
Out[191]: 
   a  b  c  d
0  N  M  1  3
1  S  F  2  4
1  S  F  2  4

And another one like this: 另一个像这样:

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

Now I want to merge these two to get a df like this: 现在,我想将这两个合并以获得类似的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

The merged df has value from dfM d's columns which got filled based on number of times the rows of dfA got repeated. 合并的df具有dfM d列中的值,这些列根据dfA行重复的次数填充。 How to do this in python? 如何在python中做到这一点?

One possible solution is, for each dfM row, use their X and Y values to filter dfA rows and set 'e' column to the remaining values of dfM rows list. 一种可能的解决方案是,对于每个dfM行,使用其XY值来过滤dfA行,并将'e'列设置为dfM行列表的其余值。 Check the example below: 检查以下示例:

for i, row in dfM.iterrows():
    d_values = row[2:].tolist()
    indexes = list(dfA[(dfA.a == row.X) & (dfA.b == row.Y)].index)
    dfA.loc[indexes, "e"] = d_values[:len(indexes)]

You can use cumcount for helper counter column for merge with left join and also second DataFrame is reshaped by melt : 您可以将cumcount用于辅助计数器列,以与左连接merge ,并且第二个DataFrame也可以通过melt重塑:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 熊猫,比较具有不同形状的数据框列 - Pandas, compare data frame columns with different shapes 合并来自两个不同数据框的列 - merging columns from two different data frame 需要从 python 中的数据框中合并一个稀疏矩阵和两列 - need to merge a sparse matrix and two columns from data frame in python 使用两个条件比较来自两个不同数据框的两列 - Compare two columns from two different data frame with two conditions 通过将第一个数据帧的一列与第二个数据帧的两列匹配来合并两个数据帧 - Merge two data frames by matching one column from the first data frame with two columns from the second data frame 如何合并不同数据框的两列,如果找到匹配项,请使用 pandas 在新列中写入“True” - How to merge two columns of different data frame and if the match is found write "True" in a new column using pandas 在 pandas/python 的同一数据框中将两列合并为一列 - Merge two columns into one within the same data frame in pandas/python Python Pandas-在列上合并两个数据框和子字符串 - Python Pandas - Merge two Data Frame and Substring on columns 合并两个pandas数据框并跳过右侧的公共列 - merge two pandas data frame and skip common columns of right 如何比较两个不同数据框中的列并保留第一个数据框中的值? - How to compare columns from two different Data Frames and keep the values from the first Data Frame?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM