在熊猫df上循环if语句

时间:2020-05-13 15:20:20

标签: python pandas loops if-statement

我有一个由三列(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然后中止。可能是什么问题呢? 谢谢

2 个答案:

答案 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是熊猫DataFrameSeries检查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)会比强制将数据强制列表。