簡體   English   中英

比較兩個連續的行並根據特定的邏輯操作創建一個新列

[英]Comparing two consecutive rows and creating a new column based on a specific logical operation

我有一個包含兩列的數據框

df = ['xPos', 'lineNum']   
import pandas as pd



data = '''\
   xPos lineNum
    40  1
    50  1
    75  1
    90  1
    42  2
    75  2
    110 2
    45  3
    70  3
    95  3
    125 3
    38  4
    56  4
    74  4'''

我已經使用創建了聚合數據框

aggrDF = df.describe(include='all')

命令

我對xPos值的最小值感興趣。 所以,我通過使用得到它

minxPos = aggrDF.ix['min']['xPos']  

期望的輸出

data = '''\
xPos lineNum xDiff
40  1   2
50  1   10
75  1   25
90  1   15
42  2   4
75  2   33
110 2   35
45  3   7
70  3   25
95  3   25
125 3   30
38  4   0
56  4   18
74  4   18'''

這個邏輯我想要主持數據幀的兩個連續行,並根據這個邏輯計算一個新列:

 if( df['LineNum'] != df['LineNum'].shift(1) ):
    df['xDiff'] = df['xPos'] - minxPos
  else:
    df['xDiff'] = df['xPos'].shift(1)

基本上,我希望新列具有df中兩個連續行的差異,只要行號相同即可。

如果行號發生變化,那么xDiff列應該與我從聚合數據幀中得到的最小xPos值有所不同。

你能幫忙嗎? 謝謝,

這兩行應該這樣做:

df['xDiff'] = df.groupby('lineNum').diff()['xPos']

df.loc[df['xDiff'].isnull(), 'xDiff'] = df['xPos'] - minxPos

>>> df
    xPos  lineNum  xDiff
0     40        1    2.0
1     50        1   10.0
2     75        1   25.0
3     90        1   15.0
4     42        2    4.0
5     75        2   33.0
6    110        2   35.0
7     45        3    7.0
8     70        3   25.0
9     95        3   25.0
10   125        3   30.0
11    38        4    0.0
12    56        4   18.0
13    74        4   18.0

您只需要groupby lineNum並apply您已寫下的條件

df['xDiff']=np.concatenate(df.groupby('lineNum').apply(lambda x : np.where(x['lineNum'] != x['lineNum'].shift(1),x['xPos'] - x['xPos'].min(),x['xPos'].shift(1)).astype(int)).values)
df
Out[76]: 
    xPos  lineNum  xDiff
0     40        1      0
1     50        1     40
2     75        1     50
3     90        1     75
4     42        2      0
5     75        2     42
6    110        2     75
7     45        3      0
8     70        3     45
9     95        3     70
10   125        3     95
11    38        4      0
12    56        4     38
13    74        4     56

暫無
暫無

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

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