我有第一个pandas.DataFrame
key status
0 1 'good'
1 2 'bad'
2 3 'good'
以及第二个pandas.DataFrame
first_key second_key status
0 0 1 'good'
1 0 1 'good'
2 0 2 'bad'
3 0 3 'good'
4 0 3 'good'
我想得到以下pandas.DataFrame
{{1}}
怎么做?
答案 0 :(得分:3)
使用第二个DataFrame
创建的系列map
:
df['status'] = df['second_key'].map(df1.set_index('key')['status'])
print (df)
first_key second_key status
0 0 1 'good'
1 0 1 'good'
2 0 2 'bad'
3 0 3 'good'
4 0 3 'good'
答案 1 :(得分:3)
pd.DataFrame.join
df1.join(df2.set_index('key'), on='second_key')
first_key second_key status
0 0 1 'good'
1 0 1 'good'
2 0 2 'bad'
3 0 3 'good'
4 0 3 'good'
答案 2 :(得分:2)
您也可以使用merge()
方法:
In [75]: d1.merge(d2.rename(columns={'key':'second_key'}))
Out[75]:
first_key second_key status
0 0 1 'good'
1 0 1 'good'
2 0 2 'bad'
3 0 3 'good'
4 0 3 'good'
如果你想添加一个列,@ jezrael的答案中显示的 .map()
方法更可取(并且效率更高)。如果您需要添加多个列,请使用.merge()
方法。
答案 3 :(得分:0)
以下是使用merge
函数(而不是merge
方法)的另一个示例。
In [16]: merged = pd.merge(df1, df2, how="inner", left_on="second_key", right_on="key")
In [17]: merged.drop("key", axis=1, inplace=True)
In [18]: merged
Out[18]:
first_key second_key status
0 0 1 good
1 0 1 good
2 0 2 bad
3 0 3 good
4 0 3 good
In [19]:
恕我直言,使用该功能使转换更加明确。但这显然是一个问题或品味......