2

我想创建一个churn如图所示的列。代码应该对每年的列进行分组和比较Col,如果Col在明年找到值,则分配 0。

在此示例中,2017 年缺少第 3 行。因此分配 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
4

1 回答 1

2

首先用Series.reindexwith添加前 4 列的所有缺失组合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
于 2020-08-11T05:21:50.810 回答