簡體   English   中英

Pandas 根據上一行不同的列值分配列值

[英]Pandas assign a column value basis previous row different column value

我有一個這樣的df:

在此處輸入圖像描述

我想要的 resultDF 需要是這樣的:

在此處輸入圖像描述

因此,除了第一行之外,我希望將供應值與前一行的可用值相加,然后用訂單值減去它。 例如,對於 resultDF 中的第 3 行,Supply 值 (2306) 是通過將來自 resultDF 的可用值(145,第 2 行)和來自 df 的 Supply 值(2161,第 3 行)相加來生成的。 然后使用供應 - 訂單簡單地計算可用價值。 任何人都可以幫助我如何生成 resultDF。

使用cumsum

df["Available"] = df["Supply"].cumsum() - df["Order"].cumsum()
df["Supply"] = df["Available"] + df["Order"]

>>> df
  product   Month  Order  Supply  Available
0  xx-xxx  202107    718  1531.0      813.0
1    None  202108    668   813.0      145.0
2    None  202109   5030  2306.0    -2724.0
3    None  202110    667 -2724.0    -3391.0

使用cumsum計算正確的值:

假設:

  • 您想修復每個產品的行
  • 您的行已按(產品,月份)排序
# Setup
data = {'Product': ['xx-xxx', 'xx-xxx', 'xx-xxx', 'xx-xxx'],
        'Month': [202107, 202108, 202109, 202110],
        'Order': [718, 668, 5030, 667],
        'Supply': [1531, 0, 2161, 0],
        'Available': [813, -668, -2869, -667]}
df = pd.DataFrame(data)

df[['Supply', 'Available']] = df.groupby('Product').apply(lambda x: \
    pd.DataFrame({'Supply': x['Order'] + x['Supply'].cumsum() - x['Order'].cumsum(),
                  'Available': x['Supply'].cumsum() - x['Order'].cumsum()}))

Output:

>>> df
  Product   Month  Order  Supply  Available
0  xx-xxx  202107    718    1531        813
1  xx-xxx  202108    668     813        145
2  xx-xxx  202109   5030    2306      -2724
3  xx-xxx  202110    667   -2724      -3391

暫無
暫無

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

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