【问题标题】:resuse agg columns panda group by重用 agg 列 panda group by
【发布时间】:2022-07-13 22:22:47
【问题描述】:

我在 csv 文件中有以下内容:

key1    key2    Key3    key4    key5

Val1    A        51     'True'  25
Val1    A        50     'False' 25
Val1    A        49     'True'  25
Val1    A        48     'True'  25
Val2    A        47     'False' 25
Val2    A        46     'True'  25
Val2    A        45     'False' 25
Val2    A        44     'True'  25
Val2    A        43     'True'  25

输出应该是这样的:

key1 key2 max_key5 total_key4 total_true_key4 grade
Val1  A   51       4          3                1
Val2  A   47       5          3                2

我必须按 key1 和 key2 分组,然后找到 key5 的最大值和 key4 的总行数和 key4 的总真实行数,然后是百分比。

我正在尝试什么:

  grd = "1 if avg > 80 else 2 if avg > 50 else c"

    pct = lambda x: (1 if x > 80 else (2 if x > 50 else 3))



json_data
    .assign(_key4=lambda df_: df_['key4'] == "'True'")
    .groupby(['key1', 'key2'])
    .agg(
        maxkey5=('key5', 'max'), 
        total_key4=('key4', 'count'), 
        total_true_key4=('_key4', 'sum')
    )
   .eval('avg = (total_true_key4 * 100) / total_key4')
   .eval('feg = grd')
  #.apply(pct(avg))

用于计算百分比的 eval 工作正常。如果在 avg 列上,则无法执行其他操作

我不想像在另一个单独的声明中那样单独申请。

【问题讨论】:

  • 我不明白为什么您的成绩栏会收到1, 2?不应该1 等于2 吗?对于key1='val1',您有三倍True,总共有四个值..

标签: python pandas dataframe


【解决方案1】:

这个怎么样?

json_data
    .assign(_key4=lambda df_: df_['key4'] == "'True'")
    .groupby(['key1', 'key2'])
    .agg(
        maxkey5=('key5', 'max'), 
        total_key4=('key4', 'count'), 
        total_true_key4=('_key4', 'sum')
        percentage=('key4', lambda x: int(sum(x)/len(x)*100))
    )

【讨论】:

  • lambda x: sum(x) / len(x) 只是mean
猜你喜欢
  • 2021-07-02
  • 1970-01-01
  • 1970-01-01
  • 2016-04-23
  • 1970-01-01
  • 1970-01-01
  • 2020-02-08
  • 2023-02-11
  • 1970-01-01
相关资源
最近更新 更多