Python - Groupby 并应用行求和函数
Python - Groupby & apply row sum function
我得到了一个数据框 df
ID A
1 2
1 3
1 4
2 1
2 2
我想遍历每个 ID 组并将行值除以其组总和,所以最后我得到以下输出列 B
ID A B
1 2 2/9
1 3 3/9
1 4 4/9
2 1 1/3
2 2 2/3
我尝试用应用命令编写自己的函数,但总是出错
def row_sum(input):
sum=input/input.sum()
return sum
df.groupby("ID").apply(row_sum: input=df["A"])
有什么想法吗?我可以将其写入 class & 方法吗?
应用分组依据时,您会得到一个 pandas.core.groupby.GroupBy
类型的对象。此 class 的应用方法接收一个函数,该函数接收 数据帧 作为其输入。
您可以尝试以下方法:
def ratio_by_group(df):
return df['A']/df['A'].sum()
df.groupby("ID").apply(ratio_by_group)
我还建议阅读 pandas.core.groupby.GroupBy.apply
上的 pandas 文档页面:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.core.groupby.GroupBy.apply.html
您可以尝试按 ID
分组并转换分组的 sum
并将每一行除以它。整个结果可以 assign
ed 到一个名为 B
.
的新列
import pandas as pd
df = pd.DataFrame({"ID": [1, 1, 1, 2, 2], "A": [2, 3, 4, 1, 2]})
df.assign(B=df["A"] / df.groupby("ID")["A"].transform("sum"))
这给出了
ID A B
0 1 2 0.222222
1 1 3 0.333333
2 1 4 0.444444
3 2 1 0.333333
4 2 2 0.666667
我得到了一个数据框 df
ID A
1 2
1 3
1 4
2 1
2 2
我想遍历每个 ID 组并将行值除以其组总和,所以最后我得到以下输出列 B
ID A B
1 2 2/9
1 3 3/9
1 4 4/9
2 1 1/3
2 2 2/3
我尝试用应用命令编写自己的函数,但总是出错
def row_sum(input):
sum=input/input.sum()
return sum
df.groupby("ID").apply(row_sum: input=df["A"])
有什么想法吗?我可以将其写入 class & 方法吗?
应用分组依据时,您会得到一个 pandas.core.groupby.GroupBy
类型的对象。此 class 的应用方法接收一个函数,该函数接收 数据帧 作为其输入。
您可以尝试以下方法:
def ratio_by_group(df):
return df['A']/df['A'].sum()
df.groupby("ID").apply(ratio_by_group)
我还建议阅读 pandas.core.groupby.GroupBy.apply
上的 pandas 文档页面:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.core.groupby.GroupBy.apply.html
您可以尝试按 ID
分组并转换分组的 sum
并将每一行除以它。整个结果可以 assign
ed 到一个名为 B
.
import pandas as pd
df = pd.DataFrame({"ID": [1, 1, 1, 2, 2], "A": [2, 3, 4, 1, 2]})
df.assign(B=df["A"] / df.groupby("ID")["A"].transform("sum"))
这给出了
ID A B
0 1 2 0.222222
1 1 3 0.333333
2 1 4 0.444444
3 2 1 0.333333
4 2 2 0.666667