gpt4 book ai didi

python - 在 Pandas 数据框中替换大于 1 的值

转载 作者:行者123 更新时间:2023-12-04 00:56:38 24 4
gpt4 key购买 nike

我试图用 1 替换所有大于 1 的数字,同时以最小的努力在整个数据框中保持原始 1 和 0 不变。感谢任何支持!

我的数据框看起来像这样,但包含更多的列和行。

Report No   Apple   Orange   Lemon   Grape   Pear
One 5 0 2 1 1
Two 1 1 0 3 2
Three 0 0 2 1 3
Four 1 1 3 0 0
Five 4 0 0 1 1
Six 1 3 1 2 0

期望的输出:

Report No   Apple   Orange   Lemon   Grape   Pear
One 1 0 1 1 1
Two 1 1 0 1 1
Three 0 0 1 1 1
Four 1 1 1 0 0
Five 1 0 0 1 1
Six 1 1 1 1 0

最佳答案

你可以试试这个。

使用 bool 掩码

df.set_index('Report No',inplace=True)
df[df > 1] = 1
df.reset_index()

Report No Apple Orange Lemon Grape Pear
One 1 0 1 1 1
Two 1 1 0 1 1
Three 0 0 1 1 1
Four 1 1 1 0 0
Five 1 0 0 1 1
Six 1 1 1 1 0

如果您有一些 非数字 列,也可以使用它。无需使用 set_indexreset_index。这相当于 df.select_dtypes('number')

val = df._get_numeric_data()
val[val > 1] = 1
df
Report No Apple Orange Lemon Grape Pear
One 1 0 1 1 1
Two 1 1 0 1 1
Three 0 0 1 1 1
Four 1 1 1 0 0
Five 1 0 0 1 1
Six 1 1 1 1 0

df.mask

df.set_index('Report No',inplace=True)
df.mask(df>1,1).reset_index()
Report No Apple Orange Lemon Grape Pear
One 1 0 1 1 1
Two 1 1 0 1 1
Three 0 0 1 1 1
Four 1 1 1 0 0
Five 1 0 0 1 1
Six 1 1 1 1 0

np.where

df[df.columns[1:]] = df.iloc[:,1:].where(df.iloc[:,1:] >1 ,1)

np.select

这在处理多个条件时会很有帮助。如果要将小于 0 的值转换为 0,将大于 1 的值转换为 1。

df.set_index('Report No', inplace=True)
condlist = [df >= 1, df <= 0] #you can have more conditions and add choices accordingly.
choice = [1, 0] #len(condlist) should be equal to len(choice).
df.loc[:] = np.select(condlist, choice)

就像 Jan 提到的使用 df.clip


不推荐,但您可以试试这个。使用 df.astype .

df.set_index('Report No',inplace=True)
df.astype('bool').astype('int')

注意: 这只会将 falsy 值转换为 False 并将 truthy 值转换为 True 即这会将 0 转换为 False 并且 0 以外的任何内容都是 True 甚至是负数。

s = pd.Series([1,-1,0])
s.astype('bool')
0 True
1 True
2 False
dtype: bool

s.astype('bool').astype('int')
0 1
1 1
2 0
dtype: int32

np.sign

当存在的值介于 [0, n] 之间时,即没有负值。

df.loc[:] = np.sign(df)

关于python - 在 Pandas 数据框中替换大于 1 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61996932/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com