gpt4 book ai didi

python - 通过第二个索引访问 pandas groupby multiindex

转载 作者:行者123 更新时间:2023-12-01 09:11:42 26 4
gpt4 key购买 nike

找不到类似的问题。假设我有带有 Multiindex(城市、月份)的grouped_price,如下所示:

City  Month     Price Sales 
LA 2017-01 10 10
2017-02 15 20
2017-05 20 35
2017-07 25 40
NY 2017-01 10 5
2017-03 15 30
2017-05 20 40
2017-06 25 45
CH 2017-01 7 10
2017-02 11 22
2017-07 30 41
OL 2017-01 9 10
2017-02 17 10
2017-05 20 30
2017-07 25 41
2017-08 30 47

因此,对于“正常”循环顺序“城市 -> 月份”,我做了:

Cities = grouped_price.index.levels[0]
for city in Cities:
labels = grouped_price.loc[city].index.labels
levels = grouped_price.loc[city].index.levels
Months = levels[0][labels[0]].unique() # for each City get a list of existing Months
for mon in Months:
# do things here
x = grouped_price.loc[city, mon] # ERROR here!

并且它有效。但对于反向循环:

Months = grouped_price.index.levels[1]
Cities = grouped_price.index.levels[0]
for mon in Months:
# Here I should get the list of Cities for specific Month
for city in Cities:
# do things here
x = grouped_price.loc[city, mon] # ERROR here!

给出错误,因为并非所有 city-mon 对都存在于 MultiIndex 中。我应该找到特定月份的城市列表,其中存在哪些城市对,但我不明白如何找到。

Cities = grouped_price.loc[:, mon] - doesn't work

附注我知道我可以旋转表格,或者以相反的顺序对它们进行分组,但我不想这样做。

最佳答案

一种解决方案是颠倒 MultiIndex 级别的顺序:

df = df.swaplevel(0, 1)

您可能还希望对新的 MultiIndex 进行排序(可选)。这是一个最小的例子:

df = pd.DataFrame([[0, 1, 2], [0, 2, 3], [1, 3, 4], [1, 1, 5]],
columns=['idx1', 'idx2', 'col'])

df = df.set_index(['idx1', 'idx2'])
df = df.swaplevel(0, 1).sort_index()

print(df)

idx2 idx1
1 0 2
1 5
2 0 3
3 1 4

关于python - 通过第二个索引访问 pandas groupby multiindex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51611222/

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