[英]How to use the pandas 'isin' function to give actual values of the df row instead of a boolean expression?
我有两个数据框,我正在比较它们标有“B”的列。 如果 df2 中 B 列的值与 df1 中 B 列的值匹配,我想从 df2 中提取 C 列的值并将其添加到 df1 中的新列中。 例子:
df1
df2
df1 的预期结果:
我试过以下。 我知道这会检查两个数据框中是否存在 B 列的匹配项——它在“新”列中返回一个布尔值 True/False。 有没有办法在匹配时提取“C”列下指示的值并将其添加到 df1 中的“新”列而不是布尔值?
df1 = pd.read_csv('df1.csv')
df2 = pd.read_csv('df2.csv')
df1['New'] = df2['B'].isin(df1['B'])
import pandas as pd
df1 = pd.DataFrame({'B': ['a', 'b', 'f', 'd', 'h'], 'C':[1, 5, 777, 10, 3]})
df2 = pd.DataFrame({'B': ['k', 'l', 'f', 'j', 'h'], 'C':[0, 9, 555, 15, 1]})
ind = df2[df2['B'].isin(df1['B'])].index
df1.loc[ind, 'new'] = df2.loc[ind, 'C']
df2
B C
0 k 0
1 l 9
2 f 555
3 j 15
4 h 1
输出 df1
B C new
0 a 1 NaN
1 b 5 NaN
2 f 777 555.0
3 d 10 NaN
4 h 3 1.0
这里的 ind 是获得的 df2 行的索引,其中有匹配项。 进一步使用loc ,左边是行索引,右边是列名。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.