我想创建一个列churn
,如图所示。
代码应该对每年的列 Col
进行分组和比较,如果找到明年的 Col
值,则分配 0。
在此示例中,2017 年缺少第 3 行。因此分配 1。
如何在 pandas 中执行此操作?
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
最佳答案
首先添加前 4 列的所有缺失组合 Series.reindex
与 MultiIndex.from_product
,然后将前 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
关于python - 如何根据特定条件转换和创建具有0和1的pandas列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63351881/