【发布时间】:2022-01-11 17:34:11
【问题描述】:
我的数据框如下所示:
| Id | name | size | metric | week1 | week2 | ... until week 20 |
|---|---|---|---|---|---|---|
| 54 | foo | 1 | A | 20 | 20 | .... |
| 54 | foo | 1 | B | 0 | 0 | .... |
| 54 | foo | 1 | C | 0.39 | 0.39 | .... |
| 54 | foo | 6 | A | 40 | 40 | .... |
| 54 | foo | 6 | B | 0.50 | 0.50 | .... |
| 54 | foo | 6 | C | 0.39 | 0.39 | .... |
所以我每个 id 有 6 行,但我只想要 3 行。我想将第 1 行与第 4 行合并,将第 2 行与第 5 行合并,将第 3 行与第 6 行合并。
所以我的目标是得到这样的东西:
| Id | name | size | metric | week1 | week2 | ... until week 20 |
|---|---|---|---|---|---|---|
| 54 | foo | 6 | A | 60 | 60 | .... |
| 54 | foo | 6 | B | 0.50 | 0.50 | .... |
| 54 | foo | 6 | C | 0.39 | 0.39 | .... |
-> 对于具有“度量”A 的行,每“周”列求和。
-> 对于具有“metric” B 和 C 的行,检查值是否相等(如果不相等:获取更高的值)
我已经尝试过:
df.groupby(["id","metric"])[df.columns[4:].sum()
但是所有带有“度量”B 和 C 的行也是总和。
对于尺寸:
保持周值(度量 A)较大的大小。
所以大小为 1 的行的值为 20,大小为 6 的行的值为 40 -> 因此保持 6 作为大小。
我知道有一个嵌套循环的解决方案,但我很确定这可以用 pandas 完成。
【问题讨论】:
-
如果能提供上面df的创建代码就好了
-
@badhushamuhammed 您可以复制表格并使用 pd.read_clipboard()。
-
在第 3 行的预期输出 week1 week2 是 0.78 对..?
标签: python pandas group-by pandas-groupby