首页 > 解决方案 > Python/Pandas/Excel 从 3 列创建二维数组

问题描述

我其实有两个问题。我有一个像下面这样的数据框。我需要将其拆分为年/月,与 Excel 中的固定宽度分隔符相同。Pandas str.split() 根据文档无法做到这一点,它需要一个分隔符。

初始df:

    Year/Period PurchDoc
0   FY19P01 162
1   FY19P02 148
2   FY19P03 133
3   FY19P04 157
4   FY19P05 152
5   FY19P06 176
6   FY19P07 123
7   FY19P08 143
8   FY19P09 161
9   FY19P10 177
10  FY19P11 152
11  FY19P12 175
12  FY20P01 203
13  FY20P02 157
14  FY20P03 206
15  FY20P04 247
16  FY20P05 182
17  FY20P06 141
18  FY20P07 205
19  FY20P08 194

预期结果:

Year    Period  PurchDoc
0   FY19    P01 162
1   FY19    P02 148
2   FY19    P03 133
3   FY19    P04 157
4   FY19    P05 152
5   FY19    P06 176
6   FY19    P07 123
7   FY19    P08 143
8   FY19    P09 161
9   FY19    P10 177
10  FY19    P11 152
11  FY19    P12 175
12  FY20    P01 203
13  FY20    P02 157
14  FY20    P03 206
15  FY20    P04 247
16  FY20    P05 182
17  FY20    P06 141
18  FY20    P07 205
19  FY20    P08 194

其次,我需要转置句点和 PurchDoc 列,使其看起来像这样(嗯,作为整数,没有 NaN,但我可以解决这个问题):

    Unnamed: 0  P01 P02 P03 P04 P05 P06 P07 P08 P09 P10 P11 P12
0   FY19    162 148 133 157 152.0   176.0   123.0   143.0   161.0   177.0   152.0   175.0
1   FY20    203 157 206 247 182.0   141.0   205.0   194.0   113.0   44.0    26.0    17.0
2   FY21    41  53  42  40  52.0    54.0    57.0    46.0    90.0    103.0   63.0    86.0
3   FY22    114 96  87  92  NaN NaN NaN NaN NaN NaN NaN NaN

不幸的是,找不到任何远程有用的谷歌搜索,所以我没有任何失败的代码要显示。

标签: pythonpandas

解决方案


df[["Year", "Period"]] = df.apply(lambda x: (x["Year/Period"][:4], x["Year/Period"][4:]), result_type="expand", axis=1)

然后:

pd.pivot_table(df, columns="Period", index="Year", values="PurchDoc", aggfunc="sum")

推荐阅读