Python Pandas数据分级

时间:2017-08-04 03:09:21

标签: python pandas binning

对于任何不明确的事情表示歉意......我是新来发布的......

我在数据框架上使用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)

提前谢谢......

1 个答案:

答案 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

我希望这能在评论中回答你的第二个问题。如果您发现答案有帮助,请单击此答案侧面的刻度标记将其标记为已接受