【问题标题】:How to aggregate only one column pandas python 2.7如何只聚合一列 pandas python 2.7
【发布时间】:2021-04-14 21:14:45
【问题描述】:

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

【问题讨论】:

    标签: pandas python-2.7 dataframe


    【解决方案1】:

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

    • 首先,将数据框按 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  
    

    【讨论】:

    • 感谢您的快速回复和详细的解释!!
    • 很高兴我能帮上忙。
    • 我还有一个问题,你知道当你不指定 colnames 时是否有方法?我尝试在值不同时加入并在值相同时聚合而不指定 colnames ?不知道有没有可能?
    • 我不太确定我明白你的意思。你能详细说明一下吗?
    • 是的,抱歉,我的头脑还不是很清楚,但我想知道我们是否只能从 col1 和其他列中指定和聚合值而不指定 colnames,因为我有一个大数据框;但没关系,我只需为数据框中的每一列指定保留第一个元素或连接元素
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-07-02
      • 2019-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-23
      • 2020-03-06
      • 2014-11-23
      • 1970-01-01
      相关资源
      最近更新 更多