假设我在Pandas中有一个多索引数据框,例如:
A B C
X Y Z
bar one a -0.007381 -0.365315 -0.024817
b -1.219794 0.370955 -0.795125
baz three a 0.145578 1.428502 -0.408384
b -0.249321 -0.292967 -1.849202
two a -0.249321 -0.292967 -1.849202
four a 0.211234 -0.967123 1.202234
foo one b -1.046479 -1.250595 0.781722
a 1.314373 0.333150 0.133331
qux one c 0.716789 0.616471 -0.298493
two b 0.385795 -0.915417 -1.367644
如何计算另一个级别中包含的级别数? (例如Y
中的等级X
)
E.g。在上面的案例中答案是:
X Y
bar 1
baz 3
foo 1
qux 2
当我尝试df.groupby(level=[0, 1]).count()[0]
时,我得到了:
C D E
A B
bar one 1 1 1
three 1 1 1
flux six 1 1 1
three 1 1 1
foo five 1 1 1
one 1 1 1
two 2 2 2
答案 0 :(得分:18)
您可以执行以下操作(逐级X
,然后计算每个组中Y
的唯一值的数量,这在重置索引时更容易):
In [15]: df.reset_index().groupby('X')['Y'].nunique()
Out[15]:
X
bar 1
baz 3
foo 1
qux 2
Name: Y, dtype: int64
答案 1 :(得分:2)
我认为这也必须工作:
对于A级:
df.groupby(level='A').size()
对于B级:
df.groupby(level=['A','B']).size()
答案 2 :(得分:1)
在转换为数据框后,您始终可以将后缀添加到列名并重置索引。
假设我有pandas.series.Series对象“ s”
>> s = train.groupby('column_name').item_id.value_counts()
>> type(s)
pandas.core.series.Series
>> y = x.to_frame()
>> data = y.add_suffix('_Count').reset_index()
>> data.head() #It will be pandas dataframe with column updates with suffix "_Count"
我将多索引系列对象转换为单级索引数据帧。