我有一个像这样的 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 系列,检查每行中是否存在所需的值。然后,您只需将相对的 True
或 False
值替换为 1 和 0。
关于python - 在 python 中使用 zip 函数迭代几列,给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33246709/