【问题标题】:distribution of ranges of numbers in PandasPandas 中数字范围的分布
【发布时间】:2018-12-10 04:05:58
【问题描述】:

我正在研究数字范围的分布,例如 0-1、2-3、4-6 和 >=7 我有以下数据框

df = pd.DataFrame()
df['T1'] =[0,2,0,3,4,5,1]
df ['T2']= [1,2,3,0,2,3,3]
df['TT'] = df.T1+df.T2

我想创建一个新列来确定范围,我写如下:

U0_1 = df ['TT']<=1
U2_3 = df ['TT']>1 & df ['TT']<=3
U4_6 = df ['TT']>3 & df ['TT']<=6
df ['TG'] = np.select([U0_1,U2_3,U4_6],['TG_0-1','TG_2-3','TG_4-6'],default = 'TG_7>=')

但它显示了以下错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

可以请教大家的意见吗?

谢谢,

泽普。

【问题讨论】:

  • U2_3 =( df ['TT']&gt;1) &amp;( df ['TT']&lt;=3) 使用()
  • 感谢您的建议。欣赏它。

标签: python pandas logical-operators


【解决方案1】:

您可以使用pd.cut,我认为这是解决此类问题的更好方法

pd.cut(df.TT,[0,1,3,6,np.inf],labels=['TG_0-1','TG_2-3','TG_4-6','TG_7>='])
0    TG_0-1
1    TG_4-6
2    TG_2-3
3    TG_2-3
4    TG_4-6
5    TG_7>=
6    TG_4-6
Name: TT, dtype: category

要修复您的代码,请添加()

U0_1 = df ['TT']<=1
U2_3 = (df ['TT']>1) & (df ['TT']<=3)
U4_6 = (df ['TT']>3) & (df ['TT']<=6)
np.select([U0_1,U2_3,U4_6],['TG_0-1','TG_2-3','TG_4-6'],default = 'TG_7>=')
array(['TG_0-1', 'TG_4-6', 'TG_2-3', 'TG_2-3', 'TG_4-6', 'TG_7>=',
       'TG_4-6'], dtype='<U6')

【讨论】:

  • 那就接受答案吧!
猜你喜欢
  • 1970-01-01
  • 2018-02-28
  • 1970-01-01
  • 1970-01-01
  • 2021-10-02
  • 2016-08-18
  • 2021-08-27
  • 1970-01-01
  • 2017-12-13
相关资源
最近更新 更多