python - 单独列的连续相同值布尔值的 A 列值的总和
问题描述
我有一个数据框:
df = pd.DataFrame(np.random.rand(15, 3), columns=list('ACD'))
df['C > D'] = df['C'] > df['D']
A C D C > D
0 0.031469 0.104515 0.123596 False
1 0.549081 0.065270 0.036311 True
2 0.426498 0.674991 0.601090 True
3 0.759211 0.680903 0.601398 True
4 0.459308 0.801639 0.572331 True
5 0.691453 0.559478 0.959135 False
6 0.181677 0.091478 0.192358 False
7 0.186661 0.981368 0.721595 True
8 0.473044 0.603869 0.683941 False
9 0.015301 0.173707 0.304635 False
10 0.645700 0.300221 0.944034 False
11 0.087918 0.020047 0.720342 False
12 0.012420 0.017378 0.050286 False
13 0.496994 0.631002 0.618231 True
14 0.133083 0.454531 0.451067 True
我正在尝试做的事情:
我正在尝试创建一个新列,它将取与Column A
列 C>D 的连续相同值组相关的总和。
所以C>D的第一个值是False
,后面没有任何False
值,所以这个连续的同值组由一个项目组成,返回值是A列中落入该组的所有元素的总和(索引0),0.031469
下一组由于值的变化(从 False 到 True)由索引 1-4(包括)组成,其中包含所有 True 值。因此,该组的值将是以下各项的总和:
1 0.549081
2 0.426498
3 0.759211
4 0.459308
这就像2.201
(在我的头顶)。
解决方案
cumsum()
可以用非零差异来识别连续的相同值。所以你可以这样做:
# print groups to see details
groups = df['C > D'].diff().ne(0).cumsum()
# groupby
df.groupby(gropus)['A'].sum()
输出:
C > D
1 0.031469
2 2.194098
3 0.873130
4 0.186661
5 1.234383
6 0.630077
Name: A, dtype: float64
推荐阅读
- java - Redis:关闭其中一个 Redis 主节点时,Spring Boot 应用程序请求不断失败
- mysql - MySQL-8.0.12 从属复制失败
- java - 如何在 pdfbox 2.0.x 中克隆生成的 PDDocument?
- c++ - 我想知道 long double 和 double 之间的区别
- javascript - 带有选项 cssModules:true 的下一个 css 排除 node_module css 文件
- cordova - Maximo Anywhere 克隆应用程序后条码扫描不起作用
- c++ - 为什么这个音频包络不会通过开关的情况进行?
- c++ - 如何制作多维类?
- javascript - 记录的第一个样本的 AudioContext currentTime 是多少?
- ruby-on-rails - NameError(未初始化的常量 Search::Listings)Rails