Dataframe 使用重复的键值从另一个数据帧分配列值

Dataframe 使用重复的键值从另一个数据帧分配列值,dataframe,dictionary,join,assign,Dataframe,Dictionary,Join,Assign,请帮帮我,我找不到好的解决办法 尝试映射、分配、合并、加入、设置索引。 也许只是我太累了:) df: df1: df_最终版本: m_num A B C 0 1 0 9 NaN 1 1 1 8 NaN 2 2 2 7 99 3 2 3 6 88 4 3 4 5 NaN 5 3 5 4 NaN 试试看: df2 = df[df['m_num'].isin(df1['m_num'])].re

请帮帮我,我找不到好的解决办法 尝试映射、分配、合并、加入、设置索引。 也许只是我太累了:)

df:

df1:

df_最终版本:

   m_num  A  B  C
0      1  0  9  NaN
1      1  1  8  NaN
2      2  2  7  99
3      2  3  6  88
4      3  4  5  NaN
5      3  5  4  NaN
试试看

df2 = df[df['m_num'].isin(df1['m_num'])].reset_index(drop=True)
df2 = pd.merge(df2,df1,on=[df1.index,'m_num']).drop('key_0',axis=1)
df2 = pd.merge(df,df2,on=['m_num','A','B'],how='left')
print(df2)
   m_num  A  B     C
0      1  0  9   NaN
1      1  1  8   NaN
2      2  2  7  99.0
3      2  3  6  88.0
4      3  4  5   NaN
5      3  5  4   NaN
打印

df2 = df[df['m_num'].isin(df1['m_num'])].reset_index(drop=True)
df2 = pd.merge(df2,df1,on=[df1.index,'m_num']).drop('key_0',axis=1)
df2 = pd.merge(df,df2,on=['m_num','A','B'],how='left')
print(df2)
   m_num  A  B     C
0      1  0  9   NaN
1      1  1  8   NaN
2      2  2  7  99.0
3      2  3  6  88.0
4      3  4  5   NaN
5      3  5  4   NaN
说明

df2 = df[df['m_num'].isin(df1['m_num'])].reset_index(drop=True)
df2 = pd.merge(df2,df1,on=[df1.index,'m_num']).drop('key_0',axis=1)
df2 = pd.merge(df,df2,on=['m_num','A','B'],how='left')
print(df2)
   m_num  A  B     C
0      1  0  9   NaN
1      1  1  8   NaN
2      2  2  7  99.0
3      2  3  6  88.0
4      3  4  5   NaN
5      3  5  4   NaN
也许有更好的解决方案,但这是我的思考过程。这个问题有点棘手,因为'm_num'是唯一的公共键,并且它有重复的值

首先,我在这里创建了一个
dataframe
匹配
df
df1
,这样我就可以使用
索引作为后续合并的另一个键

df2 = df[df['m_num'].isin(df1['m_num'])].reset_index(drop=True)
这张照片是:

   m_num  A  B
0      2  2  7
1      2  3  6
   m_num  A  B   C
0      2  2  7  99
1      2  3  6  88
正如您在上面所看到的,现在除了
m_num
键之外,我们还有索引0和1,我们可以使用它来匹配df1

df2 = pd.merge(df2,df1,on=[df1.index,'m_num']).drop('key_0',axis=1)
这张照片是:

   m_num  A  B
0      2  2  7
1      2  3  6
   m_num  A  B   C
0      2  2  7  99
1      2  3  6  88
然后将上述结果
dataframe
绑定到原始
df
并进行左连接以获得输出

df2 = pd.merge(df,df2,on=['m_num','A','B'],how='left')

您认为我们可以将标题编辑为“使用重复的键值从另一个数据框分配列值”之类的内容吗?