gpt4 book ai didi

python - 按 0 级索引的最后一个值对 Pandas MultiIndex 进行排序

转载 作者:行者123 更新时间:2023-12-04 09:59:37 24 4
gpt4 key购买 nike

我有一个叫 df_world 的 df具有以下形状:

                               Cases   Death  Delta_Cases  Delta_Death
Country/Region Date
Brazil 2020-01-22 0.0 0 NaN NaN
2020-01-23 0.0 0 0.0 0.0
2020-01-24 0.0 0 0.0 0.0
2020-01-25 0.0 0 0.0 0.0
2020-01-26 0.0 0 0.0 0.0
... ... ... ...
World 2020-05-12 4261747.0 291942 84245.0 5612.0
2020-05-13 4347018.0 297197 85271.0 5255.0
2020-05-14 4442163.0 302418 95145.0 5221.0
2020-05-15 4542347.0 307666 100184.0 5248.0
2020-05-16 4634068.0 311781 91721.0 4115.0

我想根据上次记录中“案例”列的值对国家索引进行排序,即比较所有国家在 2020 年 5 月 16 日的案例值并返回已排序的国家列表

我想创建另一个只有 2020-05-16 值的 df,然后使用 df.sort_values()方法,但我确信必须有更有效的方法。

在此期间,我还尝试仅选择在 2020 年 5 月 16 日的病例数超过特定值的国家/地区,我发现这样做的唯一方法是迭代国家/地区指数:
for a_country in df_world.index.levels[0]:
if df_world.loc[(a_country, last_date), 'Cases'] < cut_off_val:
df_world = df_world.drop(index=a_country)

但这是一种非常糟糕的方法。

如果有人对如何提高此代码的效率有任何想法,我会非常高兴。

谢谢 :)

最佳答案

您可以先按“国家/地区”对数据集进行分组,然后按“日期”对每个组进行排序,取最后一个,然后按“案例”再次排序。

自己伪造一些数据(数据类型不同,但你明白我的意思):

df = pd.DataFrame([['a', 1, 100],
['a', 2, 10],
['b', 2, 55],
['b', 3, 15],
['c', 1, 22],
['c', 3, 80]])
df.columns = ['country', 'date', 'cases']
df = df.set_index(['country', 'date'])
print(df)
# cases
# country date
# a 1 100
# 2 10
# b 2 55
# 3 15
# c 1 22
# 3 80

然后,
# group them by country
grp_by_country = df.groupby(by='country')
# for each group, aggregate by sorting by data and taking the last row (latest date)
latest_per_grp = grp_by_country.agg(lambda x: x.sort_values(by='date').iloc[-1])
# sort again by cases
sorted_by_cases = latest_per_grp.sort_values(by='cases')

print(sorted_by_cases)
# cases
# country
# a 10
# b 15
# c 80

注意安全!

关于python - 按 0 级索引的最后一个值对 Pandas MultiIndex 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61858124/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com