如何使用来自另一个pandas.DataFrame的数据填充pandas.DataFrame中的列?

时间:2018-03-18 09:37:13

标签: python pandas

我有第一个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}}

怎么做?

4 个答案:

答案 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]:

恕我直言,使用该功能使转换更加明确。但这显然是一个问题或品味......