【问题标题】:Pandas dataframe change all value if greater than 0 [duplicate]如果大于 0,Pandas 数据框会更改所有值 [重复]
【发布时间】:2019-04-26 19:05:42
【问题描述】:

我有一个数据框

df=

A    B    C
1    2    55
0    44    0
0    0    0

如果值为 >0,我想将值更改为 1。

这是正确的方法吗: df.loc[df>0,]=1

to give: 
A    B    C
1    1    1
0    1    0
0    0    0

【问题讨论】:

  • 你在df.loc[df.gt(0).all(1), :] = 1之后吗?
  • 刚试了一下,还是不行,谢谢你的尝试。还有其他想法吗?
  • 好吧,如果行的所有值都>0,如果你只想最大化每个值,那么df.clip_upper(1)?您的问题标题和正文似乎与您可能要问的内容不太一致。

标签: pandas dataframe


【解决方案1】:

使用clip_upper:

df = df.clip_upper(1)
print (df)
   A  B  C
0  1  1  1
1  0  1  0
2  0  0  0

Numpy 替代方案:

df = pd.DataFrame(np.clip(df.values, a_min=0, a_max=1), 
                  index=df.index, 
                  columns=df.columns)
print (df)
   A  B  C
0  1  1  1
1  0  1  0
2  0  0  0

如果没有负整数值的解决方案 - 比较 ge (>=) 并将掩码转换为整数:

print (df.ge(1))
       A      B      C
0   True   True   True
1  False   True  False
2  False  False  False

df = df.ge(1).astype(int)
print (df)
   A  B  C
0  1  1  1
1  0  1  0
2  0  0  0

【讨论】:

    【解决方案2】:

    你可以这样做:

    df.clip_upper(1)
    

    或者这个:

    df.where(df < 1, other=1)
    

    【讨论】:

    • 第一个是肯定的 - 但它不等同于第二个......
    • 这很好,但还有一个复杂的问题是所讨论的值并不总是 0。它可能是 20。
    • 我试过这个 df=np.where(df
    • 但是返回一个数组
    • df[df
    猜你喜欢
    • 2022-01-08
    • 2019-11-08
    • 2021-09-25
    • 2023-02-22
    • 2019-10-04
    • 2019-08-01
    • 1970-01-01
    • 2016-12-01
    • 2021-10-03
    相关资源
    最近更新 更多