Python-根据另一列的更改创建一个计数器列并再次启动计数器

标签 python pandas counting

我有一个包含月相的数据集。我想创建一个新列来计算从第一阶段第四阶段的天数。一旦Fase One开始,就从1重新开始。所以最后,我的计数器将有 1 到 27 或 28 天。

我检查了这个链接,但我还没有设法再次从 1 开始计数 Counter Column in Pandas DataFrame where it changes based on other column 。我尝试使用 for 但没有给我预期的结果

我尝试过使用 for 和不使用 for

for i in Moon.phaseIdM:
    Moon['phaseMDay'] = (Moon.phaseIdM.eq(1) 
        & Moon.phaseIdM.shift().eq(4)).cumsum() + 1

我期望:

阶段M |阶段Mday

  1    |    1

  1    |    2

  2    |    3

  2    |    4

  3    |    5

  4    |    6

  4    |    7

  1    |    1  

  2    |    2 ...

我得到了什么:

阶段M |阶段Mday

  1    |    1

  1    |    1

  2    |    1

  2    |    1

  3    |    1

  4    |    1

  4    |    1

  1    |    2  

  2    |    2 ...

预先感谢您的帮助

最佳答案

您可以按如下方式创建阶段 1-阶段 4 石斑鱼:

df['phase_group'] = ((df['phaseM']==1) & (df['phaseM'].shift()==4)).cumsum()

然后分组并进行累计计数:

df['phaseMday'] = df.groupby('phase_group').cumcount()+1

关于Python-根据另一列的更改创建一个计数器列并再次启动计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55401471/

相关文章:

python - 你如何使用 python 发送 AT GSM 命令?

python - 如何在不删除旧数据的情况下用excel中的xlsxwriter写入现有文件

python - 使用 Pandas 读取 Excel 文件时如何指定列名?

python - 有效地选择与 Pandas DataFrame 中多个值之一匹配的行

java - 输入未知数量的单词,直到输入另一个单词

algorithm - 计数排序 O(n+k) 时间复杂度中的 k 是多少?

python - Pandas 创建复制另一个单元格值的列

python - 使用字符串和数字生成列名

python - 如何在 pandas 二维数据框中复制 numpy 二维数组

java - 返回匹配列表项的计数而不迭代(java)