簡體   English   中英

Python Pandas數據分箱

[英]Python Pandas data binning

如有任何不明之處,我們深表歉意。

我正在與一個數據框架的熊貓一起工作,感謝社區的任何投入。 這是數據框的外觀……...在此處查看屏幕截圖

數據框結構的屏幕截圖

我的目標是創建一個獨立的數據框,基於5的T增量將x和y分別平均到倉中。

例如......對於范圍為0-5的T =>將對應的x,y值平均到x1bin,y1bin,然后對於范圍5-10中的T =>將對應的x,y值平均為x2bin,y2bin ..... for T在10-15范圍內=>將相應的x,y值平均為x3bin,y3bin………並在tan135-140中將其一直增加到T。 同時,將數據索引到ID…。意味着將數據保留為ID為1的ID。 您可能已經注意到,會有一些具有NAN值的bin,因為存在對應的T,這很好……。

最后,了解我計算T……的方式可能會有所幫助,這恰好是每個ID的滾動時間……,並且從0開始每個新ID

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

 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

我希望這能回答您在評論中的第二個查詢。 如果您認為答案有幫助,請單擊該答案旁邊的對勾標記,以將其標記為已接受

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM