繁体   English   中英

使用已知列值更改pandas DataFrame的多个列中的值

[英]Changing values in multiple columns of a pandas DataFrame using known column values

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

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 Series 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

另一种方法是使用get_dummies从Knownvalue列重建帧:

>>> import string
>>> new_cols = pd.get_dummies(df["Knownvalue"]//10).loc[:,range(8)].fillna(0)
>>> new_cols.columns = list(string.ascii_uppercase)[:len(new_cols.columns)]
>>> pd.concat([df[["Knownvalue"]], new_cols], axis=1)
   Knownvalue  A  B  C  D  E  F  G  H
0     17.3413  0  1  0  0  0  0  0  0
1     33.4534  0  0  0  1  0  0  0  0

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM