对于任何不明确的事情表示歉意......我是新来发布的......
我在数据框架上使用pandas,我很感激社区的任何意见。这是数据框的样子...... ...请看这里的截图
screenshot of the data frame structure
我的目标是创建一个独立的数据框,根据T的增量分别将x和y平均分为二进制数... ...
前例......对于范围为0-5的T =>平均对应的x,y值为x1bin,y1bin,然后为T,范围为5-10 =>平均对应的x,y值为x2bin,y2bin ...... ..对应的范围为10-15 =>平均对应的x,y值到x3bin,y3bin .........并在tan135-140中一直递增到T.同时索引数据到ID ...。意味着保存属于ID为1的ID的数据。您可能已经注意到会有一些带有NAN值的区域,因为有相应的Ts,这很好.......
最后,了解我计算T ......的方式可能会有所帮助......这恰好是每个ID的滚动时间.......并从每个新ID的0开始
df ['T'] = df.groupby([' ID'])。A.apply(lambda x:x - x.iloc [0])/ np.timedelta64(1,&#39 ;米&#39)
提前谢谢......
答案 0 :(得分:0)
假设df为您的数据框
t_range = 5
t_ranges = np.arange(0,df['T'].max()+1,t_range)
new_df = pd.DataFrame(columns=['t_range','x_avg','y_avg'])
for i in range(1,len(t_ranges)):
a = df[df['T']>=t_ranges[i-1]][df['T']<t_ranges[i]]
x_avg = a['X'].mean()
y_avg = a['Y'].mean()
new_df = new_df.append({'t_range':t_range[i],'x_avg':x_avg,'y_avg:y_avg},ignore_index=True)
样本数据df
T X Y
0 1 2 3
1 2 3 4
2 3 4 5
3 4 5 6
4 5 6 7
5 6 7 8
6 7 8 9
7 8 9 1
使用t_range = 2
即0-2,2-4,4-6
示例输出new_df
t_range x_avg y_avg
0 2.0 2.5 3.5
1 4.0 4.5 5.5
2 6.0 6.5 7.5
编辑: 如下所示更改x_avg和y_avg,它们将忽略数据中存在的任何NaN,使用t_range = 2
x_avg = a['X'].dropna().mean()
y_avg = a['Y'].dropna().mean()
示例数据
T X Y
0 1 2.0 6.0
---------------- t<2
1 2 NaN NaN
2 3 7.0 8.0
---------------- t<4 and t>=2
3 4 10.0 11.0
4 5 NaN 14.0
---------------- t<6 and t>=4
5 6 1.0 NaN
6 7 12.0 13.0
---------------- t<8 and t>=6
7 8 1.0 2.0
输出
t_range x_avg y_avg
0 2.0 2.0 6.0
1 4.0 7.0 8.0
2 6.0 10.0 12.5
3 8.0 6.5 13.0
我希望这能在评论中回答你的第二个问题。如果您发现答案有帮助,请单击此答案侧面的刻度标记将其标记为已接受