python - 基于来自外部对象的索引聚合组
问题描述
我有一个带有分类列和其他一些东西的数据框:
>>> np.random.seed(0xFEE7)
>>> df = pd.DataFrame({'A': np.random.randint(10, size=10),
'B': np.random.randint(10, size=10),
'C': np.random.choice(['A', 'B'], size=10)})
>>> df
A B C
0 0 0 B
1 4 0 B
2 6 6 A
3 8 3 B
4 0 2 A
5 8 4 A
6 4 1 B
7 8 7 A
8 4 4 A
9 1 1 A
我希望能够将完成的 groupbyC
应用于另一个数据帧。例如,假设
>>> ser = df['A'] - df['B']
我希望能够使用索引df.groupby(['C', D])
来计算ser
. 我可以计算单个列的组均值,例如,C
像这样:
>>> (df['A'] - df['B']).groupby(df['C']).mean()
C
A -1.250000
B 3.666667
dtype: float64
但是,使用多索引不起作用:
>>> (df['A'] - df['B']).groupby(df[['C', 'D']]).mean()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\jfoxrabinovitz\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\series.py", line 1678, in groupby
return groupby_generic.SeriesGroupBy(
File "C:\Users\jfoxrabinovitz\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\groupby\groupby.py", line 403, in __init__
grouper, exclusions, obj = get_grouper(
File "C:\Users\jfoxrabinovitz\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\groupby\grouper.py", line 617, in get_grouper
Grouping(
File "C:\Users\jfoxrabinovitz\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\groupby\grouper.py", line 345, in __init__
raise ValueError(f"Grouper for '{t}' not 1-dimensional")
ValueError: Grouper for '<class 'pandas.core.frame.DataFrame'>' not 1-dimensional
解决方案
您可以将 aseries.groupby
用于此用例,它比dataframe.groupby
.
由于我们已经有一个计算序列,并且我们使用 grouper 列获得结果的平均值,因此我们最好使用 grouper 列,series.groupby
然后.mean()
聚合结果:
(df['A'] - df['B']).groupby(df['C']).mean()
编辑:
对于多个键,您可以使用df.assign
分配一个帮助列并使用dataframe.groupby
对多个键进行分组:
df.assign(k=(df['A'] - df['B'])).groupby(['C','D'])['k'].mean()
#k is our helper column(series)
推荐阅读
- java - java.lang.NullPointerException:无法调用“java.sql.Connection.prepareStatement(String)”返回值 null
- php - 将碳日期分块成连续的块
- php - 验证票证上的 4 个号码
- javascript - 在JS中返回多个值
- javascript - 管道传输到可写流时暂停可读流
- php - PHP/HTML - 在我的网站上显示不和谐的服务器统计信息
- python - 识别元组中的元素
- c# - Adding records to database with many-to-many relations in ASP.NET Core app with EF Core
- c# - C# XML如何停止&从转换为&
- bash - 我的 systemd 单元文件和 bash 脚本不适用于接口 ppp0 检查