我有这个简单的数据框df
:
City,H
AMS,1.1
AMS,0.8
AMS,0.9
BOS,0.9
BOS,0.7
BOS,0.6
BOS,0.8
我想根据每个H
对City
列进行排序,然后使用不同的颜色绘制每个City
索引。到目前为止,我从分组和排序开始:
d = df.groupby('City').apply(lambda x: x.sort('H', ascending=False))
然后,由于我想根据某种排名为每个H
绘制City
值,我添加了一个名为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
绘制subindex
值。我试过了:
for i, group in d:
group.plot(x='subindex', y='H')
收到以下ValueError
:
for i, group in d:
ValueError: too many values to unpack
答案 0 :(得分:2)
您的‘Node’ does not name a type
不再是d
对象,而是多索引df,这就是您收到错误的原因:
groupby
这就是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
对象上调用apply
,则可以访问groupby
:
groups
您可以像以前一样正确地迭代In [69]:
g = df.groupby('City')
g.groups
Out[69]:
{'AMS': [0, 1, 2], 'BOS': [3, 4, 5, 6]}
对象:
groupby
因此,您现在要做的是使用索引级别来过滤您的df并绘制它们:
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
产生以下图:
和