0

我有如下所示的数据。对于每个客户,我希望在 2020 年下半年(202007-202012)与 2020 年上半年(202001-202006)相比,支出增加(或减少)。有没有一种快速的方法可以在熊猫中做到这一点?

顾客 日期 (YYYYMM) 花费
一个 202001 200 美元
202001 400 美元
一个 202002 500 美元
一个 202003 200 美元
一个 202004 700 美元
202002 100 美元
C 202001 50 美元

...

4

1 回答 1

2

在提供的输入中添加了下半年的几行。

输入

    Customer    Date (YYYYMM)   Spend
0   A           2020-01-01  $200.0
1   B           2020-01-01  $400.0
2   A           2020-02-01  $500.0
3   A           2020-03-01  $200.0
4   A           2020-04-01  $700.0
5   B           2020-02-01  $100.0
6   C           2020-01-01  $50.0
7   A           2020-07-01  $2000.0
8   B           2020-08-01  $250.0
9   C           2020-09-01  $40.0

代码

df['Date (YYYYMM)'] = pd.to_datetime(df['Date (YYYYMM)'], 
                                     format='%Y%m')
df["Spend"] = df["Spend"].str.replace('\$','', regex=True).astype(float)
df = df.groupby(['Customer', pd.Grouper(key='Date (YYYYMM)', 
            freq='6M', closed='left')]).sum().reset_index()
df['SpendDiff'] = df.groupby('Customer', as_index=False).Spend.diff()
df['IncDec'] = np.where(df.SpendDiff>=0,'Increase','Decrease')
df['IncDec'] = df.IncDec.mask(df.SpendDiff.isna(), '')
df
## refomatting Date column to YYYYMM and Spend 
df['Date (YYYYMM)'] = df['Date (YYYYMM)'].dt.to_period('6M').astype(str).replace('-','', regex=True)
df["Spend"] = df.Spend.astype(str).replace(r'^','$', regex=True)
df

输出

    Customer    Date (YYYYMM)   Spend   SpendDiff   IncDec
0   A           202006          $1600.0 NaN 
1   A           202012          $2000.0 400.0       Increase
2   B           202006          $500.0  NaN 
3   B           202012          $250.0  -250.0      Decrease
4   C           202006          $50.0   NaN 
5   C           202012          $40.0   -10.0       Decrease
于 2021-05-13T00:32:00.640 回答