【问题标题】:Pandas: Using group by, combine multiple column values as one distinct group within the groupbyPandas:使用 group by,将多个列值组合为 groupby 中的一个不同组
【发布时间】:2017-09-29 02:24:11
【问题描述】:

我有一个数据框,我在特定列上使用pandas.groupby,然后对生成的组(平均值、中位数、计数)运行聚合统计信息。我想将某些列值视为由 groupby 生成的同一组的成员,而不是用于分组的列中每个不同值的不同组。我正在寻找我将如何完成这样的事情。

例如:

>> my_df
ID    SUB_NUM     ELAPSED_TIME
1     1           1.7
2     2           1.4
3     2           2.1 
4     4           3.0
5     6           1.8
6     6           1.2

所以不是典型的行为:

>> my_df.groupby([SUB_NUM]).agg([count])
ID    SUB_NUM     Count
1     1           1
2     2           2
4     4           1
5     6           2 

我希望将某些值([1, 2] 中的 SUB_NUM)作为一组计算,因此会生成如下所示的内容:

>> # Some mystery pandas function calls
ID    SUB_NUM     Count
1     1, 2        3
4     4           1
5     6           2

任何帮助将不胜感激,谢谢!

【问题讨论】:

标签: python pandas dataframe group-by


【解决方案1】:

对我有用:

#for join values convert values to string
df['SUB_NUM'] = df['SUB_NUM'].astype(str)
#create mapping dict by dict comprehension
L = ['1','2']
d = {x: ','.join(L) for x in L}
print (d)
{'2': '1,2', '1': '1,2'}

#replace values by dict
a = df['SUB_NUM'].replace(d)
print (a)
0    1,2
1    1,2
2    1,2
3      4
4      6
5      6
Name: SUB_NUM, dtype: object


#groupby by mapping column and aggregating `first` and `size`
print (df.groupby(a)
         .agg({'ID':'first', 'ELAPSED_TIME':'size'})
         .rename(columns={'ELAPSED_TIME':'Count'})
         .reset_index())

  SUB_NUM  ID  Count
0     1,2   1      3
1       4   4      1
2       6   5      2

What is the difference between size and count in pandas?

【讨论】:

    【解决方案2】:

    您可以创建另一个将SUB_NUM 值映射到实际组的列,然后按它进行分组。

    my_df['SUB_GROUP'] = my_df['SUB_NUM'].apply(lambda x: 1 if x < 3 else x)
    my_df.groupby(['SUB_GROUP']).agg([count])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-05
      • 2014-09-28
      • 2023-03-30
      相关资源
      最近更新 更多