【问题标题】:Compare average values for labeled data in dataframe比较数据框中标记数据的平均值
【发布时间】:2020-08-30 20:50:47
【问题描述】:

假设我的数据框,

 Name  Num Label
0   K    10    0
1   K    21    0 
2   K    31    0
3   K    41    1
4   Y    9     0
5   Y    19    0
6   Y    14    1
7   B    33    0
8   B    43    0    
9   B    77    1
10  B    89    1

我想查看标记为 0 的数据和标记为 1 的数据的平均值的增长率。​​p>

K - label 0, mean = 20.67
K - label 1, mean = 41

所以,increased rate = (41-20.67) / 20.67 * 100 = 93.81%

它可能会被添加到一个新的列中,或者可能会生成一个新的数据框。有没有可能的方法?

*上升率是一个例子,如果标记为0的数据的平均值较大,则该值应为-(减)值。

感谢您的阅读。

【问题讨论】:

  • 似乎错字(41-20.67) / 21.67 * 100 - 需要(41-20.67) / 20.67 * 100
  • @jezrael 是的,这是个错误

标签: python pandas dataframe mean


【解决方案1】:

DataFrame.pivot_table与默认函数mean一起使用,然后进行减除:

df1 = (df.pivot_table(index='Name',columns='Label', values='Num')
         .rename(columns={0:'mean_before',1:'mean_after'}))
df1['new'] = df1['mean_after'].sub(df1['mean_before']).div(df1['mean_before']).mul(100)
print (df1)
Label  mean_before  mean_after         new
Name                                      
B        38.000000        83.0  118.421053
K        20.666667        41.0   98.387097
Y        14.000000        14.0    0.000000

【讨论】:

  • 数据透视表功能是新的。我一直很感激。
  • 我可以更改索引名称吗?我尝试 df1['0'] = df1['mean_before']
  • 我只想从数据透视表中获取名称列表,但使用普通的数据框列代码是不可能的。有办法吗?例如,df1.name
  • @ybin - 它是索引,所以需要df.index 或通过df2 = df1.reset_index() 将索引转换为列然后df2['Name'] 工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-15
  • 1970-01-01
  • 2019-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多