我有一个由三列(A,B,C)组成的df,每列包含简单数字。 我想检查A和B中的某些元素是否合计为C中的一个元素(A + B = C),并返回满足他条件的A,B元素。我正在使用以下代码:
EW_sum = []
for i in df['A']:
for j in df['B']:
if (i+j) in df['C']:
x = (i, j)
EW_sum.append((x))
但是,代码并未在A和B中的所有元素上循环;它只给我第一种情况,即A + B = C然后中止。可能是什么问题呢? 谢谢
答案 0 :(得分:0)
我改用这段代码解决了。谢谢
for i in range(0, len(df)):
x = df['A'].iloc[i]
y= df['B'].iloc[i]
if x+y in list(df['C']):
EW_sum.append((x, y))
答案 1 :(得分:0)
这里的关键问题是x in y
,其中y是熊猫DataFrame
或Series
检查x
是否在{的 index {1}},而不是值。
您可以通过查看y
的文档字符串来看到这一点,它是调用df.__contains__
时所调用的方法。
x in df['C']
您可以通过更改为>>> help(df.__contains__)
Help on method __contains__ in module pandas.core.generic:
__contains__(key) method of pandas.core.frame.DataFrame instance
True if the key is in the info axis
行来修复代码,该行将访问保存C列中数据的numpy数组并调用 its if (i + j) in df['C'].values
方法。
对于小型DataFrame而言,这无关紧要,但是对于大型数据集,检查__contains__
(或使用熊猫x in df['C'].values
方法和contains
)会比强制将数据强制列表。