gpt4 book ai didi

python - Pandas 在奇数行取平均值

转载 作者:太空宇宙 更新时间:2023-11-04 02:16:18 24 4
gpt4 key购买 nike

我想用当前行和下一行的平均值(其中列是数字)在数据框中的每一行之间填充数据

起始数据:

   time value value_1  value-2
0 0 0 4 3
1 2 1 6 6

中级 df:

   time value value_1  value-2
0 0 0 4 3
1 1 0 4 3 #duplicate of row 0
2 2 1 6 6
3 3 1 6 6 #duplicate of row 2

我想创建 df_1:

   time value value_1  value-2
0 0 0 4 3
1 1 0.5 5 4.5 #average of row 0 and 2
2 2 1 6 6
3 3 2 8 8 #average of row 2 and 4

为此,我附加了起始数据帧的副本以创建上面显示的中间数据帧:

df = df_0.append(df_0)
df.sort_values(['time'], ascending=[True], inplace=True)
df = df.reset_index()
df['value_shift'] = df['value'].shift(-1)
df['value_shift_1'] = df['value_1'].shift(-1)
df['value_shift_2'] = df['value_2'].shift(-1)

然后我在考虑对每一列应用一个函数:

def average_vals(numeric_val):
#average every odd row
if int(row.name) % 2 != 0:
#take average of value and value_shift for each value
#but this way I need to create 3 separate functions

有没有一种方法可以做到这一点而无需为每一列编写单独的函数并逐一应用于每一列(在实际数据中我有几十列)?

最佳答案

这个方法如何使用 DataFrame.reindexDataFrame.interpolate

df.reindex(np.arange(len(df.index) * 2) / 2).interpolate().reset_index(drop=True)

说明

重新索引,半步 reindex(np.arange(len(df.index) * 2)/2)

这给出了一个像这样的 DataFrame:

     time  value  value_1  value-2
0.0 0.0 0.0 4.0 3.0
0.5 NaN NaN NaN NaN
1.0 2.0 1.0 6.0 6.0
1.5 NaN NaN NaN NaN

然后使用 DataFrame.interpolate 填充 NaN 值....默认值是线性插值,所以在这种情况下是平均的。

最后,使用 .reset_index(drop=True) 修复您的索引。

应该给

   time  value  value_1  value-2
0 0.0 0.0 4.0 3.0
1 1.0 0.5 5.0 4.5
2 2.0 1.0 6.0 6.0
3 2.0 1.0 6.0 6.0

关于python - Pandas 在奇数行取平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52567054/

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