Pandas 要转换的数据框 table - 根据前两列的相加创建新列
Pandas Dataframe to pivot table - Make new column based off the addition of the previous two columns
我有一个 pandas 数据框,其中列是按月四舍五入的日期。每个月有两列,一列是预期数量,另一列是实际数量。行都是产品项目。它基本上是预测数据,如果你从事供应链工作,你就会明白我的意思。
我想要做的是对于每个月的列,从上个月列的预期中减去实际数量,然后将预期的当前月份列添加到它以获得当前月份的预期总数和将该值放入该月的新列中。
我希望能够对数据框中的所有月份执行此操作。
如果我没有很好地解释它,基本上我有一个月的产品预期,并且我有那个月的销售量。我想将它们彼此相减,并将其结转到下个月(以及之后的每个月),以查看我在任何给定月份对该项目的评价是正面还是负面。
这可能吗?
编辑:添加更多信息以供使用:
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 with three months
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"],
['2020-10-01', "10", "5", "item1", "AF"],
['2020-10-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_cumsum'] = df.groupby(['ProductID', 'Warehouse'])['QtyDiff'].cumsum()
df['New Col'] = df['QtyDiff_cumsum']
# 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)
pivot_table
输出:输出太长所以我放一张图在这里:
我有一个 pandas 数据框,其中列是按月四舍五入的日期。每个月有两列,一列是预期数量,另一列是实际数量。行都是产品项目。它基本上是预测数据,如果你从事供应链工作,你就会明白我的意思。
我想要做的是对于每个月的列,从上个月列的预期中减去实际数量,然后将预期的当前月份列添加到它以获得当前月份的预期总数和将该值放入该月的新列中。 我希望能够对数据框中的所有月份执行此操作。
如果我没有很好地解释它,基本上我有一个月的产品预期,并且我有那个月的销售量。我想将它们彼此相减,并将其结转到下个月(以及之后的每个月),以查看我在任何给定月份对该项目的评价是正面还是负面。
这可能吗?
编辑:添加更多信息以供使用:
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 with three months
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"],
['2020-10-01', "10", "5", "item1", "AF"],
['2020-10-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_cumsum'] = df.groupby(['ProductID', 'Warehouse'])['QtyDiff'].cumsum()
df['New Col'] = df['QtyDiff_cumsum']
# 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)
pivot_table
输出:输出太长所以我放一张图在这里: