【问题标题】:Allocate the first row of a group in Pandas在 Pandas 中分配组的第一行
【发布时间】:2020-11-23 14:38:29
【问题描述】:

我想分配一个组的第一行。

输入:

df = pd.DataFrame({'col1': ['A', 'A', 'B', 'B'],
                   'col2': [1, 1, 2, 3],
                   'col3': ['value1', 'value2', 'value3', 'value4']})                   

我试过了:

df.groupby(['col1', 'col2']).first()

但我只取回第一行。

我想要这个输出:

col1 col2 col3 first_row A 1 值1 真 A 1 值 2 假 B 2 值 3 真 B 3 值 4 真

【问题讨论】:

  • 您定义df 的代码是否有效,您检查了吗?'
  • 你能解释一下你是如何计算的first_row
  • first_row 列中的值从何而来? IE。我不明白逻辑

标签: python pandas


【解决方案1】:

使用groupby.cumcounteq。如果累计计数等于0,则为第一行:

df['first_row'] = df.groupby(['col1', 'col2']).cumcount().eq(0)

[出]

  col1  col2    col3  first_row
0    A     1  value1       True
1    A     1  value2      False
2    B     2  value3       True
3    B     3  value4       True

【讨论】:

    【解决方案2】:

    没有分组的替代方案:

    df['first_row'] = df.col1.shift().ne(df.col1) | df.col2.shift().ne(df.col2) 
    

    结果:

      col1  col2    col3  first_row
    0    A     1  value1       True
    1    A     1  value2      False
    2    B     2  value3       True
    3    B     3  value4       True
    

    【讨论】:

      猜你喜欢
      • 2015-01-16
      • 2021-01-08
      • 2012-09-14
      • 1970-01-01
      • 1970-01-01
      • 2017-09-27
      • 2021-12-06
      • 2020-10-20
      • 1970-01-01
      相关资源
      最近更新 更多