使用Pandas确定特定日期最常使用的位置

hts6caw3  于 2022-11-27  发布在  其他
关注(0)|答案(2)|浏览(154)

我想找出2022年2月1日使用率最高的地点。
数据

ID  location    total   marks_free  marks_utilized  date
1   NY          6       5           1               2/1/2022
2   NY          10      5           5               2/1/2022
3   NY          2       1           1               2/1/2022
4   CA          5       4           1               2/1/2022
5   CA          6       5           1               2/1/2022
6   CA          10      10          0               2/1/2022
7   NY          6       6           0               3/1/2022
8   NY          10      10          0               3/1/2022
9   NY          2       1           1               3/1/2022
10  CA          5       4           1               3/1/2022
11  CA          6       5           1               3/1/2022
12  CA          10      10          0               3/1/2022

所需

location    marks_utilized  date        
NY          38%             2/1/2022

逻辑

filter to 2/1/2022, groupby location
for instance lets take NY
sum(marks_utilized) / sum(total) * 100
7/18 *100 = 38%

# filter to 2/1/2022
df1 = df.groupby(['location', 'date']).agg({'marks_utilized': 'sum', 'total': 'sum'})
df1['marks_utilized'] = df['marks_utilized'] / df['total'] * 100

还在研究这个。任何建议都很感激。

myss37ts

myss37ts1#

只需要对您尝试进行简单的修改,它就会工作。df1['marks_utilized'] = df['marks_utilized'] / df['total'] * 100应该是df1['marks_utilized'] = df1['marks_utilized'] / df1['total'] * 100
如果你只想得到2/1/2022的结果,你可以过滤df,然后再执行groupby。同样,你可以使用df1.to_string(formatters={'marks_utilized': '{:,.2f}'.format}float化为百分比字符串。
第一个

jvidinwx

jvidinwx2#

我们可以试试

df.groupby(['location','date']).apply(lambda x : x['marks_utilized'].sum()/x['total'].sum()).\
    mul(100).reset_index(name = 'marks_utilized')
Out[279]: 
  location      date  marks_utilized
0       CA  3/1/2022        9.523810
1       NY  2/1/2022       38.888889

相关问题