pandas - 创建具有所需值的对称熊猫 GroupBy
问题描述
考虑以下数据。
我的数据有一些缺失值,即
- P1 - S1上的 3 个数据点
- P1 - S3上的 3 个数据点
- P2 - S4上的 3 个数据点
有没有一种GroupBy
方法可以填充数据使其对称?从某种意义上说,它是对称的,['Project', 'Stage']
因此不具有该类别的数据通过使用预定义/计算值填充它们来扩展(在此示例中,值为 0)。为了更清楚,请在底部查看所需的输出。
我浏览了文档,但我迷失在文档的海洋中。非常感谢一些提示或指示!谢谢!
import pandas as pd
from io import StringIO
import numpy as np
data = """ x y Project Stage
0 -10.540327 61.649657999999995 P1 S2
1 32.379704 -130.71579599999998 P1 S2
2 -2.620516 71.260701 P1 S2
3 13.978546 31.711221000000002 P1 S4
4 41.391873 88.070636 P1 S4
5 -0.303671 -84.376145 P1 S4
6 -65.370553 -7.694756 P2 S3
7 9.062894 177.233938 P2 S3
8 17.029269 -100.364923 P2 S3
9 13.354712 73.78603100000001 P2 S2
10 18.781817999999998 -109.3554 P2 S2
11 67.189193 113.94348000000001 P2 S2
12 8.762746 128.735548 P2 S1
13 59.287251 11.017662 P2 S1
14 -2.4981430000000002 -166.897776 P2 S1
15 1.1900870000000001 -82.309501 P3 S3
16 21.938575 -118.20861699999999 P3 S3
17 45.414544 122.49246000000001 P3 S3
18 -36.322626 -63.310702 P3 S2
19 53.568994999999994 141.37641100000002 P3 S2
20 26.129929999999998 153.706601 P3 S2
21 -3.9384330000000003 102.90164399999999 P3 S6
22 -8.198288 137.616797 P3 S6
23 -8.240618 -146.80676 P3 S6
24 15.193395 25.697023 P3 S5
25 20.886185 68.356337 P3 S5
26 -22.101129999999998 89.639481 P3 S5"""
df = pd.read_csv(StringIO(data), sep='\t', index_col=0)
df.groupby(['Project', 'Stage']).count()
它返回:
我目前的解决方法
def create_df(p, s):
return pd.DataFrame({
'Project': [p] * 3,
'Stage': [s] * 3
})
df.append([
create_df('P1', 'S1'),
create_df('P1', 'S3'),
create_df('P2', 'S4')
]).groupby(['Project', 'Stage']).count()
pandas 中是否有一种优雅的方式来填充其他数据,所以结果如下:
解决方案
- 为您分组的两列创建可迭代数组(见
i
下文) - 做你在问题中所做的 groupby
.reindex(index=pd.MultiIndex.from_product()
在您的数据框上使用并i
从步骤 1 和您分组的两列传递。最后,填写0
并使用.sort_values
相关栏目。
代码:
i = [df['Project'].unique(), df['Stage'].unique()]
df = df.groupby(['Project', 'Stage']).count()
df = df.reindex(index=pd.MultiIndex.from_product(i, names=['Project', 'Stage']),
fill_value=0).reset_index().sort_values(['Project', 'Stage'])
df
输出:
Project Stage x y
3 P1 S1 0 0
0 P1 S2 3 3
2 P1 S3 0 0
1 P1 S4 3 3
5 P1 S5 0 0
4 P1 S6 0 0
9 P2 S1 3 3
6 P2 S2 3 3
8 P2 S3 3 3
7 P2 S4 0 0
11 P2 S5 0 0
10 P2 S6 0 0
15 P3 S1 0 0
12 P3 S2 3 3
14 P3 S3 3 3
13 P3 S4 0 0
17 P3 S5 3 3
16 P3 S6 3 3
推荐阅读
- adodb - ADODB.Recordset 锁定我的本地源文件
- javascript - 使用 mongoose virtuals 有条件地计算条目
- rust - 你如何操纵 Rust env::args 并避免“借用时临时价值下降”?
- mongodb - MongoDB 聚合:添加定义顺序的自定义字段查询
- c# - 使用开发人员方法在 C# 中创建类库
- python - 如何使用 Python 找到函数的最大 x 值
- python - AWS DynamoDB 数据转为 Python/Boto3/Lamba 中的 json 格式
- c# - Spire PDF SaveToFile 崩溃程序
- prebid.js - 出价前出价适配器未从 DFP 获得响应
- pdf - POS 打印机 - 文件格式