如何解决如何根据特定条件转换和创建带有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.reindex
与MultiIndex.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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。