[英]grouping pandas dataframe by two columns (or more)?
我有以下数据帧:
mydf = pandas.DataFrame({"cat": ["first", "first", "first", "second", "second", "third"], "class": ["A", "A", "A", "B", "B", "C"], "name": ["a1", "a2", "a3", "b1", "b2", "c1"], "val": [1,5,1,1,2,10]})
我想创建一个数据框,该数据框生成有关具有相同class
ID的项的val
列的摘要统计信息。 为此,我使用groupby
如下:
mydf.groupby("class").val.sum()
这是正确的行为,但我想在结果df中保留cat
列信息。 可以这样做吗? 我以后必须merge/join
该信息吗? 我试过了:
mydf.groupby(["cat", "class"]).val.sum()
但这使用分层索引。 我希望有一个简单的数据帧,只有每个组的cat
值,其中group by是class
。 输出应该是具有cat和class值的数据框(不是系列),其中val
条目在具有相同class
每个条目上求和:
cat class val
first A 7
second B 3
third C 10
这可能吗?
使用reset_index
In [9]: mydf.groupby(['cat', "class"]).val.sum().reset_index()
Out[9]:
cat class val
0 first A 7
1 second B 3
2 third C 10
如果要将cat
设置为索引,则设置level = 1
In [10]: mydf.groupby(['cat', "class"]).val.sum().reset_index(level=1)
Out[10]:
class val
cat
first A 7
second B 3
third C 10
您还可以设置as_index=False
以获得相同的输出
In [29]: mydf.groupby(['cat', "class"], as_index=False).val.sum()
Out[29]:
cat class val
0 first A 7
1 second B 3
2 third C 10
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.