【问题标题】:DataFrame: add column with the size of a groupDataFrame:添加具有组大小的列
【发布时间】:2014-05-25 21:44:55
【问题描述】:

我有以下数据框:

    fsq digits  digits_type
0    1   1       odd
1    2   1       odd
2    3   1       odd
3    11  2       even
4    22  2       even
5    101 3       odd
6    111 3       odd

我想添加最后一列 count,其中包含属于 digits 组的 fsq 的数量,即:

    fsq digits  digits_type   count
0    1   1       odd          3
1    2   1       odd          3
2    3   1       odd          3
3    11  2       even         2
4    22  2       even         2
5    101 3       odd          2
6    111 3       odd          2

由于有 3 个 fsq 行的 digits 等于 1,因此 2 个 fsq 行的 digits等于 2 等。

【问题讨论】:

    标签: python pandas pandas-groupby


    【解决方案1】:
    In [395]: df['count'] = df.groupby('digits')['fsq'].transform(len)
    
    In [396]: df
    Out[396]: 
       fsq  digits digits_type  count
    0    1       1         odd      3
    1    2       1         odd      3
    2    3       1         odd      3
    3   11       2        even      2
    4   22       2        even      2
    5  101       3         odd      2
    6  111       3         odd      2
    
    [7 rows x 4 columns]
    

    【讨论】:

    • 小问题:如何将 iPython 输入/输出粘贴到 Stackoverflow 代码格式中?
    • 感谢帝斯曼。我刚刚从终端复制,粘贴在这里。然后选择文本并按 CTRL-k 将其格式化为代码。
    【解决方案2】:

    一般来说,您应该尽可能使用 Pandas 定义的方法。这通常会更有效率。

    在这种情况下,您可以使用'size',与df.groupby('digits')['fsq'].size() 一样:

    df = pd.concat([df]*10000)
    
    %timeit df.groupby('digits')['fsq'].transform('size')  # 3.44 ms per loop
    %timeit df.groupby('digits')['fsq'].transform(len)     # 11.6 ms per loop
    

    【讨论】:

      猜你喜欢
      • 2020-06-21
      • 2014-12-01
      • 1970-01-01
      • 2020-08-03
      • 2015-07-04
      • 2018-07-02
      • 2017-08-09
      • 1970-01-01
      相关资源
      最近更新 更多