我有一个这样的熊猫数据框:

    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列的特定行中,则将出现5856列,其值为1或0。我正在使用此代码。它不会给出任何错误,但是会发出警告,并且不会以正确的方式填充新列。

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)


这将返回一个布尔系列,检查所需的值是否在每一行中。然后,您可以简单地将相对的TrueFalse值替换为1和0。

09-25 22:15