使用字典按引用乘以列 Pandas
Using dictionaries to multiply columns like by reference Pandas
我有一个这样的数据框,我想使用 pandas 将行乘以它在另一个数据框中的引用值。之后,我想添加这些行中的所有产品并将其存储在名为 Pro_Sum 的列中。我知道 Python 不会通过引用传递内容,但我可以在此处进行名称绑定,因此我正在尝试创建一个字典以根据其名称将值相乘,但我没有成功。
df = pd.read_excel (C:/"dummy")
d = {"C1": 2, "C2": 5,"C3":4, "C4":1}
df.mul(pd.Series(d), axis=1)
prod = d.keys()
df[prod] = df[prod].mul(pd.Series(d), axis=1)[prod]
to_sum_t = list(df)
#.sum ignores the none numeric values.
df['Pro_sum'] = df[to_sum_t].sum(axis=1)
输入
ID AU HP Name1 Value1 CHC1 Name2 Value2 CHC2 Name3 Value3 CHC3
1 4 3 C1 10 100 0 0 0 0 0 0
2 6 2 C2 20 95 C1 6 5 0 0 0
3 2 7 C3 4 40 C4 6 60 0 0 0
4 8 9 C1 8 100 0 0 0 0 0 0
5 2 6 C1 6 10 C2 15 86 C4 1 4
参考专栏
Names Values
C1 2
C2 5
C3 4
C4 1
Example row 5 Pro_Sum = 6*2 + 15*5 + 1*1 = 88
最小输出
ID AU HP Name1 Value1 CHC1 Name2 Value2 CHC2 Name3 Value3 CHC3 Pro_Sum
1 4 3 C1 10 100 0 0 0 0 0 0 20
2 6 2 C2 20 95 C1 6 5 0 0 0 112
5 2 6 C1 6 10 C2 15 86 C4 1 4 88
我认为需要 filter
columns by names, replace
values by dictionary and convert to numpy arrays by values
、乘法、求和并分配给新列:
d = {"C1": 2, "C2": 5,"C3":4, "C4":1}
a = df.filter(like='Name').replace(d).astype(int).values
b = df.filter(like='Value').values
df['Pro_Sum'] = (a * b).sum(axis=1)
print (df)
ID AU HP Name1 Value1 CHC1 Name2 Value2 CHC2 Name3 Value3 CHC3 \
0 1 4 3 C1 10 100 0 0 0 0 0 0
1 2 6 2 C2 20 95 C1 6 5 0 0 0
2 3 2 7 C3 4 40 C4 6 60 0 0 0
3 4 8 9 C1 8 100 0 0 0 0 0 0
4 5 2 6 C1 6 10 C2 15 86 C4 1 4
Pro_Sum
0 20
1 112
2 22
3 16
4 88
我有一个这样的数据框,我想使用 pandas 将行乘以它在另一个数据框中的引用值。之后,我想添加这些行中的所有产品并将其存储在名为 Pro_Sum 的列中。我知道 Python 不会通过引用传递内容,但我可以在此处进行名称绑定,因此我正在尝试创建一个字典以根据其名称将值相乘,但我没有成功。
df = pd.read_excel (C:/"dummy")
d = {"C1": 2, "C2": 5,"C3":4, "C4":1}
df.mul(pd.Series(d), axis=1)
prod = d.keys()
df[prod] = df[prod].mul(pd.Series(d), axis=1)[prod]
to_sum_t = list(df)
#.sum ignores the none numeric values.
df['Pro_sum'] = df[to_sum_t].sum(axis=1)
输入
ID AU HP Name1 Value1 CHC1 Name2 Value2 CHC2 Name3 Value3 CHC3
1 4 3 C1 10 100 0 0 0 0 0 0
2 6 2 C2 20 95 C1 6 5 0 0 0
3 2 7 C3 4 40 C4 6 60 0 0 0
4 8 9 C1 8 100 0 0 0 0 0 0
5 2 6 C1 6 10 C2 15 86 C4 1 4
参考专栏
Names Values
C1 2
C2 5
C3 4
C4 1
Example row 5 Pro_Sum = 6*2 + 15*5 + 1*1 = 88
最小输出
ID AU HP Name1 Value1 CHC1 Name2 Value2 CHC2 Name3 Value3 CHC3 Pro_Sum
1 4 3 C1 10 100 0 0 0 0 0 0 20
2 6 2 C2 20 95 C1 6 5 0 0 0 112
5 2 6 C1 6 10 C2 15 86 C4 1 4 88
我认为需要 filter
columns by names, replace
values by dictionary and convert to numpy arrays by values
、乘法、求和并分配给新列:
d = {"C1": 2, "C2": 5,"C3":4, "C4":1}
a = df.filter(like='Name').replace(d).astype(int).values
b = df.filter(like='Value').values
df['Pro_Sum'] = (a * b).sum(axis=1)
print (df)
ID AU HP Name1 Value1 CHC1 Name2 Value2 CHC2 Name3 Value3 CHC3 \
0 1 4 3 C1 10 100 0 0 0 0 0 0
1 2 6 2 C2 20 95 C1 6 5 0 0 0
2 3 2 7 C3 4 40 C4 6 60 0 0 0
3 4 8 9 C1 8 100 0 0 0 0 0 0
4 5 2 6 C1 6 10 C2 15 86 C4 1 4
Pro_Sum
0 20
1 112
2 22
3 16
4 88