簡體   English   中英

使用新的最大值對列中的值組重新排序

[英]Reorder groups of values in the column with a new maximum value

我有一個 Pandas 數據框,其中有一列按升序排列的數字組:

column
1
2
3
4
5
6
0
1
2
3
4
1
2
3
4
5
0
0

我想重組最大值 > 4 的那些序列組。升序應該保持不變,但最大數字必須為 4。為此,我需要復制一個或多個中間數字。 所以我希望該列看起來像這樣:

column
1
2
2
2
3
4
0
1
2
3
4
1
2
2
3
4
0
0

零應該保持原樣。

首先,我嘗試使分組變量:

k = 0
l = 1
i = 0

for k in range(1, len(df)):
    if df.loc[k, 'column'] != 0:
        if  df.loc.loc[k, 'column'] > df.loc.loc[k-1, 'column']:
            df.loc.loc[k, 'position'] = l
        else:
            l = l + 1
            df.loc.loc[k, 'position'] = l
    else:
         df.loc.loc[k, 'position'] = 0
         l = l + 1

l=pd.DataFrame(df.loc.groupby('position')['columns'].max()).reset_index()

然后我試圖想出這樣的東西,但這不適用於不同的最大值(不僅僅是4):

z = 1
r = 0

for z in range (1, len(l)-1):
  if l.loc[z,'column'] > 4:
     for r in range(0, l.loc[z,'column'] - 3):
                df.loc[df['column']==2+r, 'column'] = 2

    df['column'] = np.where(df['column'] > 2, df['column'] - r, df['column'])

請幫忙!

使用groupby對每組單調增加進行分組,然后做一些數學歸一化回到 1-4 范圍:

MAX_NUMBER = 4
>>> df['column'].groupby((df['column'].diff() < 0).cumsum())\
               .apply(lambda s: s//(max(s)/MAX_NUMBER))\
               .fillna(0)

我在這里所做的只是將所有數字絕對除以max(s)/4 ,最終結果與您的非常相似。 但是您可以隨意使用您想要的任何自定義函數(例如,您可以手動將 0、1 設置為第一個位置,將 3、4 設置為最后一個位置,然后在中間填充2等)。

   column
0     0.0
1     1.0
2     2.0
3     2.0
4     3.0
5     4.0
6     0.0
7     1.0
8     2.0
9     3.0
10    4.0
11    0.0
12    1.0
13    2.0
14    3.0
15    4.0
16    0.0
17    0.0

暫無
暫無

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

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