python中的pandas 多列条件求和作为新列?

a = [[3.19,168205],[3.23,41434],[3.22,67017],[3.24,85272],[3.22,38219]]
df = pd.DataFrame(a)

0     3.19  168205
1     3.23   41434
2     3.22   67017
3     3.24   85272
4     3.22   38219

现在需要添加一个新列

新列的值是

0行 3.19*168205 / 168205
1 (3.19168205)+(3.2341434) / (168205+41434)
2 (3.19168205)+(3.2341434)+(3.22*67017) / (168205+41434+67017)
...............

这样以此计算最后得到一个新列

请问 怎么写代码呢?

阅读 2.2k
1 个回答
import pandas as pd

# 创建 DataFrame
a = [[3.19,168205],[3.23,41434],[3.22,67017],[3.24,85272],[3.22,38219]]
df = pd.DataFrame(a, columns=['col1', 'col2'])

# 计算每行的乘积并计算累积和
df['prod'] = df['col1'] * df['col2']
df['cum_sum_prod'] = df['prod'].cumsum()

# 计算 col2 的累积和
df['cum_sum_1'] = df['col2'].cumsum()

# 计算新列的值
df['new_col'] = df['cum_sum_prod'] / df['cum_sum_1']

df

结果:

   col1    col2       prod  cum_sum_prod  cum_sum_1   new_col
0  3.19  168205  536573.95     536573.95     168205  3.190000
1  3.23   41434  133831.82     670405.77     209639  3.197906
2  3.22   67017  215794.74     886200.51     276656  3.203258
3  3.24   85272  276281.28    1162481.79     361928  3.211914
4  3.22   38219  123065.18    1285546.97     400147  3.212687
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进