python - 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
不幸的是,找不到任何远程有用的谷歌搜索,所以我没有任何失败的代码要显示。
解决方案
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")
推荐阅读
- python - 我的 django 项目没有从同一目录导入文件
- asp.net-mvc - MVC bin文件夹,为什么会有这么多dll文件
- javascript - 如何使用样式组件更改焦点上的边框颜色
- firebase-realtime-database - Xamarin.Android 如何与我的应用程序的其他用户同步列表
- sql - 将 R Shiny 应用程序与 SQL 数据库集成
- rxjs - 如何将 rxjs takeWhile 运算符与 apollo-client watchQuery 一起使用?
- python - 如何从打开的 cmd.exe 窗口获取输出(字符串)?
- scala - 消除与超类的类字段同名的构造函数参数的歧义
- javascript - 输入时自动保持 textarea 更新 - 全世界
- pandas - 熊猫 | 如何计算具有相同形状的多个数据框中每个单元格的平均值?