Pandas:使用 group by,将多个列值组合为 groupby 中的一个不同组

nat*_*obo 3 python group-by dataframe pandas

我有一个数据框,我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
Run Code Online (Sandbox Code Playgroud)

因此,而不是典型的行为:

>> my_df.groupby([SUB_NUM]).agg([count])
ID    SUB_NUM     Count
1     1           1
2     2           2
4     4           1
5     6           2 
Run Code Online (Sandbox Code Playgroud)

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

>> # Some mystery pandas function calls
ID    SUB_NUM     Count
1     1, 2        3
4     4           1
5     6           2
Run Code Online (Sandbox Code Playgroud)

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

jez*_*ael 5

对我来说有效:

#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
Run Code Online (Sandbox Code Playgroud)

大熊猫的大小和数量有什么区别?