繁体   English   中英

如何使用 pandas 'isin' 函数给出 df 行的实际值而不是布尔表达式?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM