gpt4 book ai didi

python - pandas - 根据 groupby 索引级别绘制

转载 作者:行者123 更新时间:2023-12-01 04:30:32 25 4
gpt4 key购买 nike

我有这个简单的数据框df:

City,H
AMS,1.1
AMS,0.8
AMS,0.9
BOS,0.9
BOS,0.7
BOS,0.6
BOS,0.8

我想根据每个CityH列进行排序,然后用不同的颜色绘制每个City索引。到目前为止,我从分组和排序开始:

d = df.groupby('City').apply(lambda x: x.sort('H', ascending=False))

然后,由于我想根据某种排名绘制每个 CityH 值,因此我添加了一个名为 subindex 的列> 如:

d['subindex'] = d.groupby(level=0).cumcount() + 1

生成的数据框是:

       City    H  subindex
City
AMS 0 AMS 1.1 1
2 AMS 0.9 2
1 AMS 0.8 3
BOS 3 BOS 0.9 1
6 BOS 0.8 2
4 BOS 0.7 3
5 BOS 0.6 4

格式是我想要的,但我不明白为什么City列出现两次。现在的问题是根据子索引为每个City绘制H值。我尝试过:

for i, group in d:
group.plot(x='subindex', y='H')

收到以下ValueError:

for i, group in d:
ValueError: too many values to unpack

最佳答案

您的 d 不再是 groupby 对象,而是一个多索引 df,这就是您收到错误的原因:

In [61]:
for col in d:
print(col)

City
H
subindex

这就是 d 现在的样子:

Out[52]:
City H subindex
City
AMS 0 AMS 1.1 1
2 AMS 0.9 2
1 AMS 0.8 3
BOS 3 BOS 0.9 1
6 BOS 0.8 2
4 BOS 0.7 3
5 BOS 0.6 4

如果您没有对groupby对象调用apply,那么您可以访问groups:

In [69]:
g = df.groupby('City')
g.groups

Out[69]:
{'AMS': [0, 1, 2], 'BOS': [3, 4, 5, 6]}

您可以像以前一样正确地迭代 groupby 对象:

In [71]:
for i, group in g:
print(i)
print(group)

AMS
City H
0 AMS 1.1
1 AMS 0.8
2 AMS 0.9
BOS
City H
3 BOS 0.9
4 BOS 0.7
5 BOS 0.6
6 BOS 0.8

因此,您现在要做的是使用索引级别来过滤 df 并绘制它们:

for city in d.index.get_level_values(0).unique():
d[d['City']==city].plot(x='subindex', y='H')

产生以下图:

enter image description here

enter image description here

关于python - pandas - 根据 groupby 索引级别绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32453311/

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