簡體   English   中英

如何強制 pandas dataframe 的第 2 級加起來達到第 1 級?

[英]How to enforce 2nd level of pandas dataframe to add up to 1st level?

我正在嘗試做一些與這個問題非常相似的事情。 不同之處在於,我有一個預定義的匯總值 (total_by_metric_A) 和度量值,這些值可能會或可能不會加到 total_by_metric_A。

我想要做的是創建一些東西,將任何“剩余”(total_by_metric_A - 度量)分布在度量值之間,以便匯總工作。

除了遍歷並將每個指標的總和與 total_by_metric_A 值進行比較之外,我還沒有想出一種方法來執行此操作。 我希望找到一種不依賴循環的方法。 有沒有人對此有任何想法? 我在這里修改了該問題中使用的示例以適合我的。

import pandas as pd
df=pd.DataFrame({"A":[1,1,2],"B":["a","b","c"],"metric":[4,5,2], "total_by_metric_A": [10, 10, 2]})

output:

| A | B | metric | total_by_metric_A|
| 1 | a | 4      | 10               |
| 1 | b | 5      | 10               |
| 2 | c | 2      | 2                |

所需的 output(強制 a/b 分配剩余的 1):

| A | B | metric | total_by_metric_A|
| 1 | a | 4.5    | 10               |
| 1 | b | 5.5    | 10               |
| 2 | c | 2      | 2                |

你只需要GroupBy.transform

g = df.groupby('A')['metric']
df['metric'] += (df['total_by_metric_A'].sub(g.transform('sum'))
                                        .div(g.transform('size'))
                )
print(df)

Output

   A  B  metric  total_by_metric_A
0  1  a     4.5                 10
1  1  b     5.5                 10
2  2  c     2.0                  2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM