Pandas Dataframe :使用公式创建新列,该公式使用列X的所有值,直到每一行为止(类似于cumsum)

jjjwad0x  于 2023-02-07  发布在  其他
关注(0)|答案(2)|浏览(162)

很多时候(例如,对于时间序列)我需要使用一列中的所有值,直到当前行。
例如,如果我的 Dataframe 有100行,我想创建一个新列,其中每行的值是所有前面的行的(总和,平均值,乘积,[任何其他公式]),然后排除后面的行:

Row 20 = formula(all_values_until_row_20)
Row 21 = formula(all_values_until_row_21)
etc

我想问这个问题最简单的方法是:如何在不使用该特定方法的情况下为panda中的新列实现cumsum()函数?

pxiryf3j

pxiryf3j1#

如果不能使用cumsum,一种方法是引入一个新列或索引,然后应用一个lambda函数,该函数使用新列值小于当前行值的所有行。

import pandas as pd

df = pd.DataFrame({'x': range(20, 30), 'y': range(40, 50)}).set_index('x')

df['Id'] = range(0, len(df.index))
df['Sum'] = df.apply(lambda x: df[df['Id']<=x['Id']]['y'].sum(), axis=1)
print(df)
b5buobof

b5buobof2#

由于没有样本数据,我使用一个假设的 Dataframe ,其中至少有一列是数字数据,没有NaN值。我将像下面这样开始计算累积和平均值。
累计和:
df['cum_sum'] = df['existing_col'].cumsum()
累积平均值:
df['cum_avg'] = df['existing_col'].cumsum() / df['index_col']

df['cum_avg'] = df['existing_col'].expanding().mean()
如果你能提供一个示例数据框,你可以得到更好的帮助,我相信是这样的。

相关问题