假设有一个数据框
df = pd.DataFrame([['a','a','b','b','c','d', 'c'],
[1, 3, 5, 7, 9, 2, 4]], index=["alpha", "val"])
0 1 2 3 4 5 6
alpha a a b b c d c
val 1 3 5 7 9 2 4
我们能否按alpha
对数据进行分组?
我目前从 documentation 中看到的内容大多数示例都是按列标签分组的。尽管如此,还是有类似
的行pandas objects can be split on any of their axes.
# default is axis=0 grouped = obj.groupby(key)
grouped = obj.groupby(key, axis=1) <- seems to be what we want
grouped = obj.groupby([key1, key2])
我尝试使用 df.groupby("alpha", axis=1)
,但它给了我 KeyError: 'alpha'
这样做的正确方法是什么?
这是我解决另一个问题的一个步骤。在问题中,我尝试创建
a b c d
1 5 9 2
3 7 4
最佳答案
IIUC,如果您想按 alpha
列对 val 行进行分组,那很容易。您可以将系列或列表作为参数传递给 groupby
。
图表 A -
df.loc['val'].groupby(df.loc['alpha']).sum()
alpha
a 4
b 12
c 13
d 2
Name: val, dtype: int64
如果您正在执行分组操作,请指定 axis=1
-
df.groupby(df.loc['alpha'], axis=1).agg(...)
根据 Elmex80 的评论,这是带有转置的等效版本,这也是可能的 -
df.T.groupby('alpha').val.sum()
alpha
a 4
b 12
c 13
d 2
Name: val, dtype: int64
根据您的编辑,使用 pd.Series
参数调用 groupby
+ apply
,然后创建一个新数据框。
v = df.loc['val'].groupby(df.loc['alpha']).apply(pd.Series.tolist)
或者,
v = df.T.groupby('alpha').val.apply(pd.Series.tolist)
下一步,
pd.DataFrame(v.tolist(), index=v.index).T
alpha a b c d
0 1.0 5.0 9.0 2.0
1 3.0 7.0 4.0 NaN
关于python - 如何按行/水平分组(Pandas),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48254454/