当前位置: 首页 > 知识库问答 >
问题:

熊猫:根据更复杂的标准选择和修改数据帧

汲昊空
2023-03-14

我在看这个和这个线索,虽然我的问题没有那么不同,但有一些不同。我有一个满是浮点数的数据帧,我想用字符串替换它。说:

      A     B       C
 A    0     1.5     13
 B    0.5   100.2   7.3
 C    1.3   34      0.01

对于这个表,我想通过几个标准来替换,但只有第一个替换工作:

df[df<1]='N' # Works
df[(df>1)&(df<10)]#='L' # Doesn't work
df[(df>10)&(df<50)]='M'  # Doesn't work
df[df>50]='H'  # Doesn't work

如果我改为根据浮点值选择第二行,仍然不起作用:

((df.applymap(type)==float) & (df<10) & (df>1)) #Doesn't work

我想知道如何应用pd。DataFrame()。在此处屏蔽,或以任何其他方式屏蔽。我应该如何解决这个问题?

或者,我知道我可能会一列一列地阅读,并在每个系列上应用替换,但这似乎有点适得其反

编辑:有人能解释为什么上面的4个简单作业不起作用吗?


共有3个答案

孟茂学
2023-03-14

您可以使用searchsorted

labels = np.array(list('NLMH'))
breaks = np.array([1, 10, 50])
pd.DataFrame(
    labels[breaks.searchsorted(df.values)].reshape(df.shape),
    df.index, df.columns)

   A  B  C
A  N  L  M
B  N  H  L
C  L  M  N
labels = np.array(list('NLMH'))
breaks = np.array([1, 10, 50])
df[:] = labels[breaks.searchsorted(df.values)].reshape(df.shape)
df

   A  B  C
A  N  L  M
B  N  H  L
C  L  M  N

自版本0.21以来已弃用

df.mask(df.lt(1), 'N').mask(df.gt(1) & df.lt(10), 'L') \
  .mask(df.gt(10) & df.lt(50), 'M').mask(df.gt(50), 'H')

   A  B  C
A  N  L  M
B  N  H  L
C  L  M  N
逑彬炳
2023-03-14

通过使用pd。剪切

pd.cut(df.stack(),[-1,1,10,50,np.inf],labels=list('NLMH')).unstack()
Out[309]: 
   A  B  C
A  N  L  M
B  N  H  L
C  L  M  N
有权
2023-03-14
匿名用户

使用numpy。选择带有数据帧的,构造函数:

m1 = df < 1
m2 = (df>1)&(df<10)
m3 = (df>10)&(df<50)
m4 = df>5

vals = list('NLMH')

df = pd.DataFrame(np.select([m1,m2,m3,m4], vals), index=df.index, columns=df.columns)
print (df)
   A  B  C
A  N  L  M
B  N  H  L
C  L  M  N

 类似资料:
  • 我正试图根据一个标准将x个列的数据归零 例如: 第1页: 一月二月三月四月五月六月七月八月九月十月十一月十二月 第2页: 版本(标准)=2 因此,我想选择前两个月,并在1月份将所有数据归零 更新:到目前为止,我得到了这么多,现在我只能选择 我无法让它选择范围。

  • 我有一个带有ActionListener的JRadioButton,但我不知道如何在点击另一个面板时触发JButton的图标更改。下面列出了两者的代码。选择正确的单选按钮后,图像需要从左键切换到右键。 }

  • 我有一个熊猫数据框,大约有50列和

  • 问题内容: 假设我有一个熊猫数据框: 我想计算数据框的列均值。 这很简单: 然后按列范围max(col)-min(col)。这又很容易: 现在,对于每个元素,我要减去其列的均值并除以其列的范围。我不确定该怎么做 任何帮助/指针将不胜感激。 问题答案:

  • 我在Python中使用一个视频游戏的熊猫DataFrame,每个游戏都有一种类型。我正在尝试删除任何在DataFrame中出现次数少于一定次数的类型的视频游戏,但我不知道该怎么做。我确实发现了一个StackOverflow问题,这个问题似乎是相关的,但我根本无法破译这个解决方案(可能是因为我从未听说过R,而且我对函数编程的记忆充其量也很生疏)。 帮助?

  • 问题内容: 有没有一种方法可以从Pandas的DataFrame中选择随机行。 在R中,使用汽车包装,有一个有用的功能,它类似于head,但在此示例中,从x中随机选择10行。 我也看过切片文档,似乎没有什么等效的。 现在使用版本20。有一个示例方法。 问题答案: 像这样吗 注: 由于熊猫v0.20.0的, 已被弃用,赞成基于标签索引。