python - 如何根据特定条件转换和创建具有0和1的pandas列

标签 python pandas pandas-groupby churn

我想创建一个列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.reindexMultiIndex.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/

相关文章:

python - 使用 dataframe2 中设置的条件从 dataframe1 中提取值(pandas,python)

python - 将 Pandas 中的句子拆分为句号和单词

python - Pandas Groupby 和应用具有自定义函数的方法

python - df.hist() 与 df.plot.hist()?

pandas - 根据 pandas 的所有列值创建重复标志

python - 对空数据框的 Groupby-Transform 引发异常

python - tkinter 中的 'askquestion' 和 'askyesno' 有什么区别?

python - 我可以信任哪个工具?

Python将日期时间小时设置为特定时间

java - 使用多种编程语言(Python Java C#)构建用于开发 Web 应用程序的基础架构