python - 在 python 中使用 zip 函数迭代几列,给出错误

标签 python pandas dataframe

我有一个像这样的 pandas 数据框:

    dx1      dx2    dx3    dx4    dx5       dx6     dx7
0   25041   40391   5856    0     V4511    V5867    30000
1   25041   40391   25081   5856  5363     3572     0
2   25041   40391   42822   0     5856     0        0
3   25061   40391   0       0     0        0        0
4   25041   40391   0       5856  25081    V4511    25051

我想为像 5856 这样的单元格值创建额外的列。因此,如果 5856 出现在任何 dxs 列的该特定行中,则将有一个值为 1 或 0 的 5856 列。我正在使用这段代码。它不会给出任何错误,但会发出警告,并且不会以正确的方式填充新列。

X11['5856'] = np.NAN
i = 0

for value in zip(X11.loc[:,'dx1':'dx59']):
    if value == 5856:
        X11['5856'][i] = 1
    else:
        X11['5856'][i] = 0
    i+1

我收到的警告是这样的:

C:\Anaconda3\lib\site-packages\ipykernel\__main__.py:8: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

我得到了 5856 列,其值:0、NaN、NaN......

这是预期的结果:事实上,我想为不同的单元格值创建多个列,例如 25041、5363 等。

    dx1      dx2    dx3    dx4    dx5       dx6     dx7    5856
0   25041   40391   5856    0     V4511    V5867    30000   1
1   25041   40391   25081   5856  5363     3572     0       1
2   25041   40391   42822   0     5856     0        0       1
3   25061   40391   0       0     0        0        0       0
4   25041   40391   0       5856  25081    V4511    25051   1

最佳答案

要在数据框中查找特定值,我将使用 .isin 方法,如下所示:

# Add a column
df['5856'] = df.isin([5856]).any(1)

这将返回一个 bool 系列,检查每行中是否存在所需的值。然后,您只需将相对的 TrueFalse 值替换为 1 和 0。

关于python - 在 python 中使用 zip 函数迭代几列,给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33246709/

相关文章:

python - 需要Microsoft Visual C++ 14.0(无法找到vcvarsall.bat)

python - pandas系列中的两列排序

python - 如何在 SQL 中使用 'in' 和 'not in' 过滤 Pandas 数据帧

python - 非数字数据的散点图

python - 在 Pandas 数据框中使用什么 dtype 表示金钱?

python - CPLEX 目标函数中的线性项和二次项

python - 根据概率生成二维列表

python - boto3.client ('S3' ) 返回什么?

python - python中的列中的前三个最大值

python - 将 Python pandas 数据帧行切片写入文件