gpt4 book ai didi

python - 动态访问 pandas 数据框的子集,执行计算并写入新数据框

转载 作者:行者123 更新时间:2023-11-30 22:17:15 27 4
gpt4 key购买 nike

我有一个非常大的数据框,我想从中提取子样本,执行一些计算,然后将这些结果写入新的数据框。对于示例,请考虑:

df_test = pd.DataFrame(np.random.randint(low=0, high=10, size=(5, 5)),
columns=['a', 'b', 'c', 'd', 'e'])
df_test

返回此:

    a   b   c   d   e
0 1 9 0 3 0
1 5 4 1 0 3
2 9 3 6 3 5
3 6 2 5 9 7
4 9 0 7 9 5

现在我想“提取”始终3行,从头开始滚动并计算每列的平均值(例如,其他计算也可以):

df_1
a b c d e
0 1 9 0 3 0
1 5 4 1 0 3
2 9 3 6 3 5

df_2
a b c d e
1 5 4 1 0 3
2 9 3 6 3 5
3 6 2 5 9 7

df_3
a b c d e
2 9 3 6 3 5
3 6 2 5 9 7
4 9 0 7 9 5

结果数据框为

result
a b c d e
0 5 5.3 2.3 3 2.7
1 6.7 3 4 4 5
2 8 1.7 6 7 5.3

我怎样才能做到这一点?

最佳答案

使用rolling并按 iloc 删除前 NaN 行或dropna :

N = 3
df = df.rolling(N).mean().iloc[N-1:]
<小时/>
df = df.rolling(3).mean().dropna(how='all')

print (df)
a b c d e
2 5.000000 5.333333 2.333333 2.0 2.666667
3 6.666667 3.000000 4.000000 4.0 5.000000
4 8.000000 1.666667 6.000000 7.0 5.666667

如果还需要第一行、第一行+第二行的平均值,请添加参数min_periods:

df1 = df.rolling(3, min_periods=1).mean()
print (df1)
a b c d e
0 1.000000 9.000000 0.000000 3.0 0.000000
1 3.000000 6.500000 0.500000 1.5 1.500000
2 5.000000 5.333333 2.333333 2.0 2.666667
3 6.666667 3.000000 4.000000 4.0 5.000000
4 8.000000 1.666667 6.000000 7.0 5.666667

编辑:

手动方法应该是创建一行DataFrame,然后将所有内容连接在一起:

dfs = []
N = 3
for x in np.arange(len(df)+1)[N:]:
df1 = df.iloc[np.arange(x - N, x)]
#print (df1)
s = df1.mean().to_frame().T
#print (s)
dfs.append(s)

df2 = pd.concat(dfs, ignore_index=True)
print (df2)
a b c d e
0 5.000000 5.333333 2.333333 2.0 2.666667
1 6.666667 3.000000 4.000000 4.0 5.000000
2 8.000000 1.666667 6.000000 7.0 5.666667

关于python - 动态访问 pandas 数据框的子集,执行计算并写入新数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49715104/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com