python - 如何向由条件语句形成的表添加新列?

标签 python csv pandas

我有一个非常简单的查询。

我有一个如下所示的 csv:

ID X Y
1 10 3
2 20 23
3 21 34

我想添加一个名为 Z 的新列,如果 X 等于或大于 Y,则该列等于 1,否则等于 0。

到目前为止我的代码是:

import pandas as pd

data = pd.read_csv("XYZ.csv")
for x in data["X"]:
   if x >= data["Y"]:
      Data["Z"] = 1
   else:
      Data["Z"] = 0

最佳答案

您可以在不使用循环的情况下使用 ge 来完成此操作这意味着大于或等于,并使用 astype 将 bool 数组转换为 int :

In [119]:
df['Z'] = (df['X'].ge(df['Y'])).astype(int)
df

Out[119]:
   ID   X   Y  Z
0   1  10   3  1
1   2  20  23  0
2   3  21  34  0

关于您的尝试:

for x in data["X"]:
   if x >= data["Y"]:
      Data["Z"] = 1
   else:
      Data["Z"] = 0

这是行不通的,首先你使用的是Data而不是data,即使修复了这个问题,你也会将标量与数组进行比较,所以这会引发警告,因为将标量与数组进行比较是不明确的,第三,您要分配整个列,因此会覆盖该列。

您需要访问您的循环无法访问的索引标签,您可以使用 iteritems为此:

In [125]:
for idx, x in df["X"].iteritems():
    if x >= df['Y'].loc[idx]:
        df.loc[idx, 'Z'] = 1
    else:
        df.loc[idx, 'Z'] = 0
df

Out[125]:
   ID   X   Y  Z
0   1  10   3  1
1   2  20  23  0
2   3  21  34  0

但实际上这是不必要的,因为这里有一个矢量化方法

关于python - 如何向由条件语句形成的表添加新列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41980944/

相关文章:

python - 在 Python 中检查循环

php - 发送 POST 请求 wget

python - 如何逐行写入CSV?

c# - 如何分隔文本文件每一行中的字符串并将它们与用户输入进行比较

python-2.7 - 使用具有多索引的数据框创建条形图

python - 将 for 循环应用于 Pandas 中的多个 DataFrame

python - 更改与 python 中第二个数据帧匹配的行的第一个数据帧的值

python - 尝试打印字节字符串的字符时出现奇怪的行为

python - 如何找到与给定范围元组重叠的元组

python - 导入 zbar 会导致 python 以退出代码 139 退出 - 在运行 10.9 的 mac 上可能导致这种情况的原因是什么?