Python 使用已知列值更改数据帧的多列中的值

Python 使用已知列值更改数据帧的多列中的值,python,pandas,Python,Pandas,假设我有这样一个数据帧: Knownvalue A B C D E F G H 17.3413 0 0 0 0 0 0 0 0 33.4534 0 0 0 0 0 0 0 0 我想做的是当Knownvalue在0-10之间时,A从0变为1。当Knownvalue在10-20之间时,B从0变为1,依此类推 更换后应该是这样的: Knownva

假设我有这样一个数据帧:

Knownvalue    A    B    C    D    E    F    G    H
  17.3413     0    0    0    0    0    0    0    0
  33.4534     0    0    0    0    0    0    0    0
我想做的是当Knownvalue在0-10之间时,A从0变为1。当Knownvalue在10-20之间时,B从0变为1,依此类推

更换后应该是这样的:

Knownvalue     A    B    C    D    E    F    G    H
   17.3413     0    1    0    0    0    0    0    0
   33.4534     0    0    0    1    0    0    0    0

有人知道如何应用方法来更改它吗?

我首先将
Knownvalue
序列存储到一个整数列表中,该列表等于其截断值除以10(例如27.87//10=2)。这些桶表示所需列位置的整数。因为
Knownvalue
在第一列中,所以我在这些值中添加了一个

接下来,我枚举这些bin值,它有效地为我提供了行和列整数索引的元组对。我使用
iat
将这些位置的值设置为1

import pandas as pd
import numpy as np

# Create some sample data.
df_vals = pd.DataFrame({'Knownvalue': np.random.random(5) * 50})
df = pd.concat([df_vals, pd.DataFrame(np.zeros((5, 5)), columns=list('ABCDE'))], axis=1)

# Create desired column locations based on the `Knownvalue`.
bins = (df.Knownvalue // 10).astype('int').tolist()
>>> bins
[4, 3, 0, 1, 0]

# Set these locations equal to 1.
for idx, col in enumerate(bins):
    df.iat[idx, col + 1] = 1  # The first column is the `Knownvalue`, hence col + 1

>>> df
   Knownvalue  A  B  C  D  E
0   47.353937  0  0  0  0  1
1   37.460338  0  0  0  1  0
2    3.797964  1  0  0  0  0
3   18.323131  0  1  0  0  0
4    7.927030  1  0  0  0  0

另一种方法是使用以下方法从Knownvalue列重构框架:

get_dummies
做艰苦的工作:

>>> (df.Knownvalue//10)
0    1
1    3
Name: Knownvalue, dtype: float64
>>> pd.get_dummies((df.Knownvalue//10))
   1  3
0  1  0
1  0  1

(注意:文本比图像方便得多,因为你可以复制和粘贴文本。因此,我恢复了文本版本。)你能解释一下“对于枚举(idx)中的n,c:df.iat[n,c+1]=1”吗?@ZixuanZhang使用
idx
变量的目的是检查
Knownvalue
是否小于10,并将其转换为0,大于10但小于20将转换为1,以此类推。他通过应用
floor
函数来实现这一点,该函数取一个浮点数并向下取整
enumerate
获取
idx
的列表,并为您提供
索引
,分别分配给
n
c
。从那以后,他使用
iat
@Leb将
1
分配给他们各自的数据帧列,我自己刚刚找到了答案!不管怎样,谢谢你的具体解释!
>>> (df.Knownvalue//10)
0    1
1    3
Name: Knownvalue, dtype: float64
>>> pd.get_dummies((df.Knownvalue//10))
   1  3
0  1  0
1  0  1