如何仅聚合一列熊猫 python 2.7

时间:2021-01-09 09:51:26

标签: pandas python-2.7 dataframe

我尝试像这样基于一列“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

2 个答案:

答案 0 :(得分:0)

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

  • 首先,按 col1 对数据框进行分组,然后对分组的对象执行 .agg
  • 然后我们将在 col2 上使用 lambda 函数来获取 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 从其值存储在 list 中转换为正确的 string,我们可以使用 join , 它的元素:

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  

答案 1 :(得分:0)

根据 Sophods 的回答,一行代码应该可以解决您的问题

df = df.groupby('col1').agg({'col2':lambda x: ",".join(x),'col3':np.mean,'col4':'first'}).reset_index()