我正在跟随领英上关于多级pandas数据框的教程(链接),但我无法重现一个看似非常基本的操作(在3:00处)。您不必观看视频就能理解问题。
下面这个使用seaborn数据集的代码片段将展示我无法使用视频中展示的技术,以及在SO帖子(链接)中描述的添加列到多级pandas数据框的方法。
我们开始吧:
上述两个来源通过使用以下简单的内容来证明这一点:
在这里,“total”应该出现在现有索引下的新列中。但我得到了这个错误:TypeError: cannot insert an item into a CategoricalIndex that is not already an existing category。
我正在使用Python 3,作者在2015年的视频中也是如此。
这是怎么回事?
我尝试过多次,仅使用以上系列的值,以及重塑、转置、合并和连接数据作为pd.Series和pd.DataFrame。并重新设置索引。我可能忽略了一些重要的细节,现在我希望从你们中的一些人那里得到建议。
编辑1 - 这是根据jezrael的第一个建议尝试的结果:
下面这个使用seaborn数据集的代码片段将展示我无法使用视频中展示的技术,以及在SO帖子(链接)中描述的添加列到多级pandas数据框的方法。
我们开始吧:
import pandas as pd
import seaborn as sns
flights = sns.load_dataset('flights')
flights.head()
flights_indexed = flights.set_index(['year', 'month'])
flights_unstack = flights_indexed.unstack()
print(flights_unstack)
输出:
passengers
month January February March April May June July August September October November December
year
1949 112 118 132 129 121 135 148 148 136 119 104 118
1950 115 126 141 135 125 149 170 170 158 133 114 140
1951 145 150 178 163 172 178 199 199 184 162 146 166
1952 171 180 193 181 183 218 230 242 209 191 172 194
1953 196 196 236 235 229 243 264 272 237 211 180 201
1954 204 188 235 227 234 264 302 293 259 229 203 229
1955 242 233 267 269 270 315 364 347 312 274 237 278
1956 284 277 317 313 318 374 413 405 355 306 305 336
1957 315 301 356 348 355 422 465 467 404 347 310 337
1958 340 318 362 348 363 435 491 505 404 359 362 405
1959 360 342 406 396 420 472 548 559 463 407 362 405
1960 417 391 419 461 472 535 622 606 508 461 390 432
现在我想添加一列,显示每年每月的总和,使用以下方式:
flights_unstack.sum(axis = 1)
输出:
year
1949 1520
1950 1676
1951 2042
1952 2364
1953 2700
1954 2867
1955 3408
1956 3939
1957 4421
1958 4572
1959 5140
1960 5714
上述两个来源通过使用以下简单的内容来证明这一点:
flights_unstack['passengers', 'total'] = flights_unstack.sum(axis = 1)
在这里,“total”应该出现在现有索引下的新列中。但我得到了这个错误:TypeError: cannot insert an item into a CategoricalIndex that is not already an existing category。
我正在使用Python 3,作者在2015年的视频中也是如此。
这是怎么回事?
我尝试过多次,仅使用以上系列的值,以及重塑、转置、合并和连接数据作为pd.Series和pd.DataFrame。并重新设置索引。我可能忽略了一些重要的细节,现在我希望从你们中的一些人那里得到建议。
编辑1 - 这是根据jezrael的第一个建议尝试的结果:
import pandas as pd
import seaborn as sns
flights = sns.load_dataset('flights')
flights.head()
flights_indexed = flights.set_index(['year', 'month'])
flights_unstack = flights_indexed['passengers'].unstack()
flights_unstack['total'] = flights_unstack.sum(axis = 1)
输出:
类型错误: 无法将项插入到不是现有类别的分类索引中
df.columns = pd.CategoricalIndex(df.columns).add_categories(['total'])
。 - jezrael