Pandas 将行复制到具有权重的唯一行
Pandas duplicate rows to unique rows with weight
我正在尝试合并一个数据框中的行,其中我对一个 ID 有不同的输入,因此我希望每个 ID 都有一行并具有权重。
我的数据框如下所示:
ID A B C D weight
1 0.5 2 a 1 1.0
2 0.3 3 b 2 0.35
2 0.6 5 c 3 0.55
3 0.4 2 d 4 0.9
我需要它将 ID=2 的 A、B 列合并为加权平均值(A 为 0.3*0.35+0.6*0.55,B 为 3*0.35+5*0.55)。对于 C 列,我需要选择与最高权重关联的值(对于 ID=2,C=c),D 列是最大值(在本例中为 D=3),最终权重作为所有权重的总和( 0.35+0.55)。基本上,我需要为重复 ID 的每一行分配几个不同的规则,但我还没有找到如何做到这一点。
我正在使用 python 我相信 pandas 最适合这个,但我只是这里的初学者,所以我会听取并尝试您的任何建议!
非常感谢!
import pandas as pd
a = pd.read_clipboard()
def agg_func(x):
x.A = x.A*x.weight
x.B = x.B*x.weight
return pd.Series([x.A.sum(), x.B.sum(), x.C[x.weight.idxmax()], x.D.max(), x.weight.max()], index=x.columns[1:])
print(a.groupby('ID').apply(agg_func))
A B C D weight
ID
1 0.500 2.0 a 1 1.00
2 0.435 3.8 c 3 0.55
3 0.360 1.8 d 4 0.90
这应该做检查http://pandas.pydata.org/pandas-docs/stable/groupby.html以了解更多信息。
我正在尝试合并一个数据框中的行,其中我对一个 ID 有不同的输入,因此我希望每个 ID 都有一行并具有权重。
我的数据框如下所示:
ID A B C D weight
1 0.5 2 a 1 1.0
2 0.3 3 b 2 0.35
2 0.6 5 c 3 0.55
3 0.4 2 d 4 0.9
我需要它将 ID=2 的 A、B 列合并为加权平均值(A 为 0.3*0.35+0.6*0.55,B 为 3*0.35+5*0.55)。对于 C 列,我需要选择与最高权重关联的值(对于 ID=2,C=c),D 列是最大值(在本例中为 D=3),最终权重作为所有权重的总和( 0.35+0.55)。基本上,我需要为重复 ID 的每一行分配几个不同的规则,但我还没有找到如何做到这一点。
我正在使用 python 我相信 pandas 最适合这个,但我只是这里的初学者,所以我会听取并尝试您的任何建议!
非常感谢!
import pandas as pd
a = pd.read_clipboard()
def agg_func(x):
x.A = x.A*x.weight
x.B = x.B*x.weight
return pd.Series([x.A.sum(), x.B.sum(), x.C[x.weight.idxmax()], x.D.max(), x.weight.max()], index=x.columns[1:])
print(a.groupby('ID').apply(agg_func))
A B C D weight
ID
1 0.500 2.0 a 1 1.00
2 0.435 3.8 c 3 0.55
3 0.360 1.8 d 4 0.90
这应该做检查http://pandas.pydata.org/pandas-docs/stable/groupby.html以了解更多信息。