Python Pandas 数据合并
Python Pandas data binning
对于任何不清楚的地方深表歉意...我是新来这里发帖的....
我正在使用 pandas 处理数据框,非常感谢社区的任何意见。这是数据框的样子……请看这里的截图
screenshot of the data frame structure
我的目标是创建一个独立的数据框,根据 5 的 T 增量分别将 x 和 y 平均到 bin 中......
例如……对于0-5范围内的T =>平均对应的x,y值到x1bin,y1bin,然后对于5-10范围内的T =>平均对应的x,y值到x2bin,y2bin ........for T in range 10-15 => average corresponding x, y values into x3bin, y3bin .........and increment this all the way to T in tan135-140.同时将数据索引到ID…。意味着将属于ID的数据保留为ID 1。您可能已经注意到,会有一些带有 NAN 值的 bin,因为有相应的 T,这很好......
最后,知道我计算T的方法可能会有所帮助……它恰好是每个ID的A滚动时间……。并且每个新ID都从0开始
df['T'] = df.groupby(['ID']).A.apply(lambda x: x - x.iloc[0]) / np.timedelta64( 1、'm')
提前谢谢你……
假设 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 used
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
我希望这能回答您在评论中提出的第二个问题。如果您发现答案有帮助,请点击此答案旁边的刻度标记将其标记为已接受
对于任何不清楚的地方深表歉意...我是新来这里发帖的....
我正在使用 pandas 处理数据框,非常感谢社区的任何意见。这是数据框的样子……请看这里的截图
screenshot of the data frame structure
我的目标是创建一个独立的数据框,根据 5 的 T 增量分别将 x 和 y 平均到 bin 中......
例如……对于0-5范围内的T =>平均对应的x,y值到x1bin,y1bin,然后对于5-10范围内的T =>平均对应的x,y值到x2bin,y2bin ........for T in range 10-15 => average corresponding x, y values into x3bin, y3bin .........and increment this all the way to T in tan135-140.同时将数据索引到ID…。意味着将属于ID的数据保留为ID 1。您可能已经注意到,会有一些带有 NAN 值的 bin,因为有相应的 T,这很好......
最后,知道我计算T的方法可能会有所帮助……它恰好是每个ID的A滚动时间……。并且每个新ID都从0开始
df['T'] = df.groupby(['ID']).A.apply(lambda x: x - x.iloc[0]) / np.timedelta64( 1、'm')
提前谢谢你……
假设 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 used
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
我希望这能回答您在评论中提出的第二个问题。如果您发现答案有帮助,请点击此答案旁边的刻度标记将其标记为已接受