python - pandas 数据框按特定值分组

标签 python pandas dataframe group-by

假设我有一个 pandas 交易数据框,如下所示:

+----------+----------+----------+---------+
|  Owner   |  Seller  | Mediator |  Buyer  |
+----------+----------+----------+---------+
| 'andrew' | 'bob'    | 'tom'    | 'john'  |
| 'andrew' | 'andrew' | 'bill'   | 'jason' |
| 'andrew' | 'bill'   |  'bill'  | 'tom'   |
+----------+----------+----------+---------+

我想执行一个奇怪的分组 - 我想根据交易中的任何参与情况按人员姓名进行分组。所以输出将是:

+----------+-------+
|   Name   | Count |
+----------+-------+
| 'andrew' |     3 |
| 'bob'    |     1 |
| 'tom'    |     2 |
| 'john'   |     1 |
| 'bill'   |     2 |
| 'jason'  |     1 |
+----------+-------+

即,“andrew”的计数为 3,因为他的名字出现在 3 笔交易中,“john”的计数为 1,因为他只出现在 1 笔交易中,等等。

执行此操作有什么建议吗?提前致谢

最佳答案

您可以使用 unstack() 至:

  1. 将所有名称放入一列
  2. groupby 名称并计数唯一原始索引,即>level_1unstack()reset_index() 之后:
    (df.unstack()
       .reset_index(name='Name')
       .groupby('Name') 
       .level_1 
       .nunique() 
       .rename('Count') 
       .reset_index())

    #Out[xx]:
    #     Name  Count
    #0  andrew      3
    #1    bill      2
    #2     bob      1
    #3   jason      1
    #4    john      1
    #5     tom      2

关于python - pandas 数据框按特定值分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59002043/

相关文章:

python - 使用 map_partitions 和 pd.df.to_sql 从 dask 数据帧创建 sql 表

python - 在 pyWin32 中设置自动过滤器的条件

python - 按范围对数据进行分组时如何更改 bin 大小?

Python:如何根据其他列的条件选择 Pandas 行?

python - 向行值添加尾随零以确保有 10 位数字

R 返回行名称的部分匹配

python - 重新训练 inception 谷歌云陷入全局步骤 0

python - 在两个不同的 pandas 数据帧之间搜索和替换值

python - 沿同一索引合并列

java - 如果在 Apache Spark Java 中为空,则用另一个值替换一行的值