如何基于另一个来补充数据帧?

问题描述 投票:0回答:2

给出两个数据帧。一个包含一列重复的值(在这种情况下为a)。另一个包含此值对应的内容(在此示例中,它对应于某些“ d”值)。我如何根据另一个数据帧中记录的规则,用一个新列有效地补充第一个数据帧,其中的值对应于某个现有列。这是一个非常慢的示例代码:

import pandas as pd
import numpy as np

d1 = pd.DataFrame(np.asarray([[1,2,3], [2,4,5], [3,4,5], [2,1,4], [3,4,5]]), columns = ['a', 'b', 'c'])
d2 = pd.DataFrame(np.asarray([[1,7], [2,8], [3,11]]), columns = ['a', 'd'])

d = np.empty((d1.shape[0],))

for i in range(d1.shape[0]):
    temp = d2.loc[d2['a'] == d1.at[i,'a']]
    d[i] = temp['d'].array[0]

d1['d'] = d

这是d1原稿:

   a  b  c
0  1  2  3
1  2  4  5
2  3  4  5
3  2  1  4
4  3  4  5

这是d2:

   a   d
0  1   7
1  2   8
2  3  11

这是结果d1:

   a  b  c   d
0  1  2  3   7
1  2  4  5   8
2  3  4  5  11
3  2  1  4   8
4  3  4  5  11
python-3.x pandas
2个回答
3
投票

您可能正在寻找pd.merge。就您而言,d1 = d1.merge(d2, on=['a'], how='left')应该可以解决问题。


2
投票

另一种方法是使用map并仅设置所需的值。

d1['d'] = d1['a'].map(d2.set_index('a')['d'])
d1

输出:

   a  b  c   d
0  1  2  3   7
1  2  4  5   8
2  3  4  5  11
3  2  1  4   8
4  3  4  5  11
© www.soinside.com 2019 - 2024. All rights reserved.