[英]Python Pandas How to calculate the average of every other row in a column
[英]Calculate column average row by row using pandas
我有以下 pandas DF:
val
1 10
2 20
3 30
4 40
5 30
我想得到兩個 output 列: avg和avg_sep
avg應該是逐行計算的平均值。
avg_sep應該是在特定條件之前逐行計算的平均值(即直到第 3 行我計算一個平均值,在第 3 行之前我開始計算另一個平均值),我的預期 output 是:
val avg avg_sep
1 10 10 10
2 20 15 15
3 30 20 20
4 40 25 40
5 30 26 35
我知道我可以使用df.mean(axis=0)
來獲取列的平均值。 但是我怎樣才能得到預期的 output 呢?
從評論中的討論:
import pandas as pd
import numpy as np
# Building frame:
df = pd.DataFrame(
data={"val": [10, 20, 30, 40, 30]},
index=[1, 2, 3, 4, 5]
)
# Solution:
df["avg"] = df["val"].cumsum() / np.arange(1, 6) # or `/ df.index`
df.loc[:3, "avg_sep"] = df.loc[:3, "val"].cumsum() / np.arange(1, 4)
df.loc[4:, "avg_sep"] = df.loc[4:, "val"].cumsum() / np.arange(1, 3)
使用mean()
擴展:
df = pd.DataFrame(data=[[10],[20],[30],[40],[30]], columns=["val"])
df["avg"] = df["val"].expanding().mean()
split_at = 3
df["sep_flag"] = pd.concat([df["val"][:split_at,].expanding().mean(), df["val"][split_at:,].expanding().mean()])
[Out]:
val avg sep_flag
0 10 10.0 10.0
1 20 15.0 15.0
2 30 20.0 20.0
3 40 25.0 40.0
4 30 26.0 35.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.