如何在 pandas 数据帧中应用乘法

how to apply multiplication within pandas dataframe

请告知如何获得以下输出:

df1 = pd.DataFrame([['1, 2', '2, 2','3, 2','1, 1', '2, 1','3, 1']])
df2 = pd.DataFrame([[1, 2, 100, 'x'], [3, 4, 200, 'y'], [5, 6, 300, 'x']])

import numpy as np
df22 = df2.rename(index = lambda x: x + 1).set_axis(np.arange(1, len(df2.columns) + 1), inplace=False, axis=1)

f = lambda x: df22.loc[tuple(map(int, x.split(',')))]
df = df1.applymap(f)
print (df)
Output:
   0  1  2  3  4  5
0  2  4  6  1  3  5

df1 是 df2 的 'address' 行,col 格式(1,2 是第一行,第二列是 2,2,2 是 4 3,2 是 6 等等)

我需要添加第 3 列和第 4 列的值以获得类似 (2*100x, 4*200y, 6*300x, 1*100x, 3*200y, 5*300x)

的内容

输出应该是 5000(x 和 y 的总和), 0.28 ( 1400/5000 - y 的百分比)

我不清楚你为什么需要 df1 和 df...也许你的问题缺少一些细节?

您可以直接计算您的值:

df22['val'] = (df22[1] + df22[2])*df22[3]

输出:

   1  2    3  4   val
1  1  2  100  x   300
2  3  4  200  y  1400
3  5  6  300  x  3300

从那里可以直接计算总和(总计和按第 4 列分组):

total = df22['val'].sum() # 5000
y_sum = df22.groupby(4).sum().loc['y', 'val'] # 1400
print(y_sum/total) # 0.28

编辑:如果 df1 不一定包含第 1 列和第 2 列的所有成员,您可以遍历它(在您的问题中不清楚为什么 df1 是数据框或者它是否可以有多行,因此我把它弄平了):

df22['val'] = 0

for c in df1.to_numpy().flatten():
    i, j = map(int, c.split(','))
    df22.loc[i, 'val'] += df22.loc[i, j]*df22.loc[i, 3]

这会为您提供与上述示例相同的输出,但会忽略不在 df1 中的值。