簡體   English   中英

Pandas Dataframe 到 pivot 表 - 基於前兩列的添加創建新列

[英]Pandas Dataframe to pivot table - Make new column based off the addition of the previous two columns

我有一個 pandas dataframe 列是按月四舍五入的日期。 每個月有兩欄,一欄是預期數量,另一欄是實際數量。 這些行都是產品項目。 它基本上是預測數據,如果你從事供應鏈工作,你就會明白我的意思。

我想要做的是對於每個月的列,從上個月列的預期中減去實際數量,然后將預期的當前月份列添加到預期的當前月份的總數中,並將該值放入該月的新列。 我希望能夠在 dataframe 中的所有月份都這樣做。

如果我沒有很好地解釋它,基本上我有一個月的產品預期,並且我有那個月的銷售量。 我想將它們彼此相減並將其延續到下個月(以及之后的每個月),以查看我在任何給定月份對該項目是積極還是消極。

這可能嗎?

編輯:添加更多信息以使用:

data = np.array([['2020-08-01',"10", "5", "item1", 'AF'],
                ['2020-08-01', "2", "4", "item1", "QF"],
                ['2020-09-01', "15", "30", "item1", "AF"],
                ['2020-09-01', "10", "5", "item1", "QF"]])
df = pd.DataFrame(data=data, columns=['Month', 'ExpectedQty', 'ActualQty', 'ProductID', 'Warehouse'])

pivot_table = df.pivot_table(columns=df.Month,
                            values=['ActualQty', 'ExpectedQty'],
                            index=[df['ProductID'], df['Warehouse']],
                            fill_value='')
pivot_table.columns = pivot_table.columns.swaplevel(0, 1)
pivot_table.sort_index(axis=1, level=0, inplace=True)

如何將上面代碼中的“pivot_table”變成下面想要的樣子?

          Date       |           2020-08-01        |          2020-09-01           |
          Quantities | Expected | Actual | New Col | Expected | Actual |  New Col  |
                             
ProductID | Warehouse 
item1     |   AF     |      10  |    5   |    -5   |    15    |   30   |     10    |
              QF     |      2   |    4   |     2   |    10    |    5   |     -3    |
item2 ...
# your code for data
data = np.array([['2020-08-01',"10", "5", "item1", 'AF'],
                ['2020-08-01', "2", "4", "item1", "QF"],
                ['2020-09-01', "15", "30", "item1", "AF"],
                ['2020-09-01', "10", "5", "item1", "QF"]])
df = pd.DataFrame(data=data, columns=['Month', 'ExpectedQty', 'ActualQty', 'ProductID', 'Warehouse'])
df[['ExpectedQty', 'ActualQty']] = df[['ExpectedQty', 'ActualQty']].astype('float')

# calculate new col
df = df.sort_values('Month')
df['QtyDiff'] = df['ActualQty'] - df['ExpectedQty']
df['QtyDiff_last'] = df.groupby(['ProductID', 'Warehouse'])['QtyDiff'].shift(1).fillna(0)
df['New Col'] = df['QtyDiff'] + df['QtyDiff_last']

# get pivot table
pivot_table = df.pivot_table(columns='Month',
                             values=['ActualQty', 'ExpectedQty', 'New Col'],
                             index=['ProductID', 'Warehouse'],
                             fill_value='')
pivot_table.columns = pivot_table.columns.swaplevel(0, 1)
pivot_table.sort_index(axis=1, level=0, inplace=True)

output:

Month                   2020-08-01                      2020-09-01
                        ActualQty   ExpectedQty New Col ActualQty   ExpectedQty New Col
ProductID   Warehouse                       
item1       AF           5.0        10.0        -5.0    30.0        15.0    10.0
            QF           4.0        2.0          2.0    5.0         10.0    -3.0

暫無
暫無

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

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