通过在另一个数据框中查找值向数据框中添加一列
Add a column to a dataframe by looking up values in another dataframe
考虑这两个数据框:
index = [0, 1, 2, 3]
columns = ['col0', 'col1']
data = [['A', 'D'],
['B', 'E'],
['C', 'F'],
['A', 'D']
]
df1 = pd.DataFrame(data, index, columns)
df2 = pd.DataFrame(data = [10, 20, 30, 40], index = pd.MultiIndex.from_tuples([('A', 'D'), ('B', 'E'), ('C', 'F'), ('X', 'Z')]), columns = ['col2'])
我想向 df1 添加一列,告诉我查看 df2 的值。预期的结果是这样的:
index = [0, 1, 2, 3]
columns = ['col0', 'col1', 'col2']
data = [['A', 'D', 10],
['B', 'E', 20],
['C', 'F', 30],
['A', 'D', 10]
]
df3 = pd.DataFrame(data, index, columns)
实现此目标的最佳方法是什么?我想知道是否应该用字典然后映射或更简单的东西来完成。我不确定。
试试这个:
indexes = list(map(tuple, df1.values))
df1["col2"] = df2.loc[indexes].values
输出:
#print(df1)
col0 col1 col2
0 A D 10
1 B E 20
2 C F 30
3 A D 10
正常合并:
pd.merge(df1, df2, left_on=["col0", "col1"], right_index=True, how="left")
输出:
col0 col1 col2
0 A D 10
1 B E 20
2 C F 30
3 A D 10
考虑这两个数据框:
index = [0, 1, 2, 3]
columns = ['col0', 'col1']
data = [['A', 'D'],
['B', 'E'],
['C', 'F'],
['A', 'D']
]
df1 = pd.DataFrame(data, index, columns)
df2 = pd.DataFrame(data = [10, 20, 30, 40], index = pd.MultiIndex.from_tuples([('A', 'D'), ('B', 'E'), ('C', 'F'), ('X', 'Z')]), columns = ['col2'])
我想向 df1 添加一列,告诉我查看 df2 的值。预期的结果是这样的:
index = [0, 1, 2, 3]
columns = ['col0', 'col1', 'col2']
data = [['A', 'D', 10],
['B', 'E', 20],
['C', 'F', 30],
['A', 'D', 10]
]
df3 = pd.DataFrame(data, index, columns)
实现此目标的最佳方法是什么?我想知道是否应该用字典然后映射或更简单的东西来完成。我不确定。
试试这个:
indexes = list(map(tuple, df1.values))
df1["col2"] = df2.loc[indexes].values
输出:
#print(df1)
col0 col1 col2
0 A D 10
1 B E 20
2 C F 30
3 A D 10
正常合并:
pd.merge(df1, df2, left_on=["col0", "col1"], right_index=True, how="left")
输出:
col0 col1 col2
0 A D 10
1 B E 20
2 C F 30
3 A D 10