首页 > 解决方案 > 如何只聚合一列 pandas python 2.7

问题描述

我尝试像这样基于一列“col1”进行聚合,并与其他列保持相同的值:

df_input 

       col1      col2    col3    col4  
0       ID1      DE      69      min-8     
1       ID1      DZ      69      min-8
2       ID3      DA      54      min-15
3       ID3      AC      54      min-15
4       ID3      RC      54      min-15
5       ID8      UC      2       min-40
6       ID8      TC      2       min-40
7       ID8      VC      2       min-40
8       ID8      WC      2       min-40
9       ID7      XC      4       min-7



df_output 

           col1      col2             col3    col4  
    0       ID1      DE,DZ            69      min-8     
    1       ID3      DA,AC,RC         54      min-15
    2       ID8      UC,TC,VC,WC      2       min-40
    3       ID7      XC               4       min-7

标签: pandaspython-2.7dataframe

解决方案


让我们尝试破解下面的代码。

  • 首先,按col1对数据框进行分组,然后.agg对分组的对象执行。
  • 然后我们将在col2lambda上使用一个函数来获取它的所有元素list
  • 让我们使用参数'first'来表明我们只想保留col3col4的第一个元素
  • 然后,重置索引。
agg_df = (df.groupby('col1')
      .agg({'col2': lambda x: x.tolist(),'col3':'first','col4':'first'})
      .reset_index())     

print(agg_df)

  col1              col2  col3    col4
0  ID1          [DE, DZ]    69   min-8
1  ID3      [DA, AC, RC]    54  min-15
2  ID7              [XC]     4   min-7
3  ID8  [UC, TC, VC, WC]     2  min-40

然后将col2从存储在 a 中的值转换list为适当的string,我们可以join使用 a 来转换它的元素,

agg_df['col2'].apply(lambda x: ','.join(str(i) for i in x))

Out[16]: 
0          DE,DZ
1       DA,AC,RC
2             XC
3    UC,TC,VC,WC
Name: col2, dtype: object  

推荐阅读