python - 根据多个 groupby 计算总和
问题描述
我有一个 df 和一个 dict 如下:-
dict_min_count = {'A':1,'B':4,'C':2,'D':3}
df:-
mac_type Test time_diff
1 A 567
1 B 2
1 B 6
1 B 8
1 B 9
1 B 8
1 C 99
1 D 1
1 D 2
1 D 10
1 D 1
2 A 2
2 A 12
2 A 21
2 B 22
2 B 12
2 C 2
2 C 3
2 D 1
2 D 3
2 D 12
2 D 12
通过使用这两个数据,我需要使用一些条件来计算总和:1)对于 mac_type 的任何测试,我只需要计算 dict_min_count 字典中存在的前 n 行的总和。
示例:对于测试 A,无需计算总和,因为值为 1。对于每个 mac_type 的测试 B,计算 4 行的总和。如果没有 4 行,则计算其中的条目数(在 mac_type 2 的情况下,机器 B 只有 2 个条目,因此总和仅适用于那 2 行)
我正在查看的最终结果如下:
Tests
mac_type A B C D
1 567 (2+6+8+9) 99 (1+2+10)
2 2 (12+22) (2+3) (1+3+12)
解决方案
使用自定义函数与Series.head
字典匹配值 thensum
和 last Series.unstack
for DataFrame
:
dict_min_count = {'A':1,'B':4,'C':2,'D':3}
df = (df.groupby(['mac_type','Test'])['time_diff']
.apply(lambda x: x.head(dict_min_count[x.name[1]]).sum())
.unstack())
print (df)
Test A B C D
mac_type
1 567 25 99 13
2 2 34 5 16
推荐阅读
- sql - 使用 EXISTS 指令是否改进了这个查询
- python - 是否有任何选项可以检查 URL 是否有效?在将它传递给 scrapy 中的下一个函数之前,Python
- spring - 使用 @EventListener 的 Spring ExitCodeEvent 不起作用
- python - 如何将其更改为超链接?不和谐.py
- python - 向 numpy 数组添加偏差
- php - 从 url 获取文本数据并刷新它
- python - 如何用数据框中的对象(PIL-Images)替换 int 值?
- perl - 如何打印包变量
- flutter - 如何在 Flutter 中的 ViewModel 之间共享全局状态
- flutter - 如何在 Flutter Web 中使用 Back/Next 浏览器按钮正确导航?