给出两个数据帧。一个包含一列重复的值(在这种情况下为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
您可能正在寻找pd.merge。就您而言,d1 = d1.merge(d2, on=['a'], how='left')
应该可以解决问题。
另一种方法是使用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