簡體   English   中英

根據python pandas數據框中其他列的值計算新列

[英]Calculates new columns based on other columns' values in python pandas dataframe

我想基於pandas數據框中其他列的值創建一個新列。 我的數據是關於一輛從裝卸地點到卸貨地點來回移動的卡車。 我要計算當前路段到最后一段的距離。 數據示例如下所示:

State      | segment length | 
-----------------------------
Loaded     |    20          |
Loaded     |    10          |
Loaded     |    10          |
Empty      |    15          |
Empty      |    10          |
Empty      |    10          |
Loaded     |    30          |
Loaded     |    20          |
Loaded     |    10          |

因此,道路的盡頭將是國家變化的記錄。 因此,我想計算到道路盡頭的距離。 最終的數據幀將是:

State   | segment length | Distance to end
Loaded  |       20       |     40
Loaded  |       10       |     20
Loaded  |       10       |     10
Empty   |       15       |     35
Empty   |       10       |     20
Empty   |       10       |     10
Loaded  |       30       |     60
Loaded  |       20       |     30
Loaded  |       10       |     10

有人可以幫忙嗎? 先感謝您

使用GroupBy.cumsumDataFrame.iloc進行交換順序,使用Custom Series獲得具有shiftcumsum唯一連續組:

g = df['State'].ne(df['State'].shift()).cumsum()
df['Distance to end'] = df.iloc[::-1].groupby(g)['segment length'].cumsum()
print (df)
    State  segment length  Distance to end
0  Loaded              20               40
1  Loaded              10               20
2  Loaded              10               10
3   Empty              15               35
4   Empty              10               20
5   Empty              10               10
6  Loaded              30               60
7  Loaded              20               30
8  Loaded              10               10

詳細說明

print (g)
0    1
1    1
2    1
3    2
4    2
5    2
6    3
7    3
8    3
Name: State, dtype: int32
df['Distance to end'] = (
    df.assign(i=df.State.ne(df.State.shift()).cumsum())
    .assign(s=lambda x: x.groupby(by='i')['segment length'].transform(sum))
    .groupby(by='i')
    .apply(lambda x: x.s.sub(x['segment length'].shift().cumsum().fillna(0)))
    .values
)

    State   segment length  Distance to end
0   Loaded  20              40.0
1   Loaded  10              20.0
2   Loaded  10              10.0
3   Empty   15              35.0
4   Empty   10              20.0
5   Empty   10              10.0
6   Loaded  30              60.0
7   Loaded  20              30.0
8   Loaded  10              10.0

暫無
暫無

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

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