【问题标题】:pandas conditional cumcount of values in second column?pandas 第二列中值的条件计数?
【发布时间】:2025-12-22 01:25:12
【问题描述】:

我想根据KEY 列中的值填写flag 列中的数字。

  • 如果KEY 列中的值保持不变,我想为每两行填充相同的数字,而不是使用cumcount() 填充增量数字。
  • 如果KEY 列中的值发生变化,填充的数字也会发生变化。

这里是例子,df1是我想要的df0。

df0 = pd.DataFrame({'KEY':['0','0','0','0','1','1','1','2','2','2','2','2','3','3','3','3','3','3','4','5','6']})

df1 = pd.DataFrame({'KEY':['0','0','0','0','1','1','1','2','2','2','2','2','3','3','3','3','3','3','4','5','6'],
                    'flag':['0','0','1','1','2','2','3','4','4','5','5','6','7','7','8','8','9','9','10','11','12']})

【问题讨论】:

  • 我编辑了您的标题以使其更清晰,您可以根据需要重新编辑。另外,当您真正的意思是“熊猫”时,不要将事物称为“python”;只有 12% 的 SO python 问题是关于熊猫的。
  • 首先,您所有的值都是整数而不是字符串,所以您可以编辑代码以将它们分配/转换为整数吗? (或使用df1.apply(pd.to_numeric, axis=1)
  • 接下来,您能否用文字编辑您的解释以澄清?这个太依赖flagKEY的数据了;我们是否应该总是假设KEY 是单调递增的并且只变化+1?听起来你想在KEY 的连续两行块上使用条件cumcount(),默认情况下flag 也每两行增加+1,当KEY 增加时额外+1?
  • @smci,感谢您的 cmets。我的示例是我的真实数据集的表示。 KEY 列由 df['KEY'] = df.groupby([several feature columns]).ngroup() 创建。目的是按特征将行区分为组。然后在每个组中,我尝试制作成对的行。
  • @David Erickson,感谢您的回答。它按我的意愿工作。我做正确的事。

标签: python pandas cumulative-sum


【解决方案1】:

您想要获取 cumcount 并添加一个。然后使用%2 区分奇数行或偶数行。然后,将累积和减去 1,从零开始计数。

你可以使用:

df0['flag'] = ((df0.groupby('KEY').cumcount() + 1) % 2).cumsum() - 1
df0
Out[1]: 
   KEY  flag
0    0      0
1    0      0
2    0      1
3    0      1
4    1      2
5    1      2
6    1      3
7    2      4
8    2      4
9    2      5
10   2      5
11   2      6
12   3      7
13   3      7
14   3      8
15   3      8
16   3      9
17   3      9
18   4     10
19   5     11
20   6     12

【讨论】:

    最近更新 更多