通过包含另一个组的第一个值来进行数据框分组
这是我的简化示例数据框:
timestamp A B C
1422404668 1 1 2
1422404670 2 2 3
1422404672 -3 3 4
1422404674 -4 4 5
1422404676 5 5 6
1422404678 -6 6 7
1422404680 -7 7 8
1422404680 8 8 9
有没有一种方法可以按正值和负值进行分组,并获取 A 列中每个组的第一个值、B 列的平均值(包括下一组的第一个值)以及下一个组的第一个值之间的差列 C 的组和当前组的第一个值如下输出
预期输出:
timestamp A B C
1422404668 1 2 2
1422404672 -3 4 2
1422404676 5 5.5 1
1422404678 -6 7 2
1422404680 8 8 9
数据:
{'timestamp': [1422404668, 1422404670, 1422404672, 1422404674,
1422404676, 1422404678, 1422404680, 1422404680],
'A': [1, 2, -3, -4, 5, -6, -7, 8], 'B': [1, 2, 3, 4, 5, 6, 7, 8], 'C': [2, 3, 4, 5, 6, 7, 8, 9]}
我使用下面的代码来获取组依据、平均值和组中的差异,但如何将下一组的第一个值包含在平均差异中(B 栏和 C 栏)
m=df['A'].lt(0)
df.groupby(m.ne(m.shift()).cumsum()).agg(
{'timestamp': 'first',
A: 'first',
B: 'mean',
C: lambda x: x.iat[-1]-x.iat[0] if len(x) > 1 else x.iat[0]
}).reset_index(drop=True)
Here is my simplified example dataframe:
timestamp A B C
1422404668 1 1 2
1422404670 2 2 3
1422404672 -3 3 4
1422404674 -4 4 5
1422404676 5 5 6
1422404678 -6 6 7
1422404680 -7 7 8
1422404680 8 8 9
Is there a way to group by positive and negative values and get first value of each group in column A, mean values of column B (including the first value of next group) and difference between first value of next group and first value of current group for column C as below output
Expected output:
timestamp A B C
1422404668 1 2 2
1422404672 -3 4 2
1422404676 5 5.5 1
1422404678 -6 7 2
1422404680 8 8 9
Data:
{'timestamp': [1422404668, 1422404670, 1422404672, 1422404674,
1422404676, 1422404678, 1422404680, 1422404680],
'A': [1, 2, -3, -4, 5, -6, -7, 8], 'B': [1, 2, 3, 4, 5, 6, 7, 8], 'C': [2, 3, 4, 5, 6, 7, 8, 9]}
I'm using the below code to get group by and mean values and difference in the group but how to include the first value of next group in mean difference (column B and C)
m=df['A'].lt(0)
df.groupby(m.ne(m.shift()).cumsum()).agg(
{'timestamp': 'first',
A: 'first',
B: 'mean',
C: lambda x: x.iat[-1]-x.iat[0] if len(x) > 1 else x.iat[0]
}).reset_index(drop=True)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
对于聚合
mean
还包括下一个第一个值聚合sum
、size
和first
以及计数meanfirst
进行聚合后,以类似的方式获取C
的差异第一个值:For aggregate
mean
also include next first value aggregatesum
,size
andfirst
and countmean
affter aggragation with shifted valuesfirst
and similar way get difference first values ofC
: