如何根据特定条件转换和创建带有0和1的熊猫列

问题描述

我要创建一个列churn,如图所示。 该代码应分组并比较每年的列Col,如果明年发现Col值,则分配0。

在此示例中,2017年缺少第三行。因此分配1。

如何在熊猫中做到这一点?

State ID    Col   Year  cost  Churn
CT    123   M     2016  10    0
CT    123   C     2016  15    0
CT    123   A     2016  10    1
CT    123   C     2016  20    0
CT    123   M     2017  10    0
CT    123   C     2017  15    0

解决方法

首先将Series.reindexMultiIndex.from_product的前4列的所有缺失组合相加,然后每前3列按DataFrameGroupBy.shift进行移位,最后使用DataFrame.merge进行原始排序并删除所有添加的行(如果没有参数on,则使用在所有DataFrame中相同的所有列):

s = df.assign(Churn=0).set_index(['State','ID','Col','Year'])['Churn']
df1 = df.merge(s.reindex(pd.MultiIndex.from_product(s.index.levels),fill_value=1)
                .groupby(level=[0,1,2])
                .shift(-1,fill_value=0)
                .reset_index())
print (df1)
  State   ID Col  Year  Churn
0    CT  123   M  2016      0
1    CT  123   C  2016      0
2    CT  123   A  2016      1
3    CT  123   M  2017      0
4    CT  123   C  2017      0

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...