【发布时间】: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,总共有四个值..