根据dupliacte列nam添加sum

2024-05-15 22:35:19 发布

您现在位置:Python中文网/ 问答频道 /正文

对于下面的数据帧df

Filename                                   Language    
Repo/Repo_3/.travis.yml                    YAML        20
Repo/Repo_3/backup_automater_services.py   Python      18
Repo/Repo_3/batch_file_rename.py           Python      33
Repo/Repo_3/cbd_pennies.                   C           26
Repo/Repo_3/cbd_rand.                      C           19
Repo/Repo_3/cbd_rand_dist.                 C           20
Repo/Repo_3/chaos.py                       Python       8
Repo/Repo_3/chapter02/item01/Provider.jav  Java         4
Repo/Repo_3/chapter02/item01/Service.jav   Java         3
Repo/Repo_3/chapter02/item01/Services.jav  Java        25

试着找出一种求语言列中重复项之和的方法。 所有C语言或Python的总和

Filename                                   Language    Sum of All  
Repo/Repo_3                                YAML        20 
Repo/Repo_3                                Python      118
Repo/Repo_3                                C           120
Repo/Repo_3                                Java        125

尝试使用groupby,但运气不好

df.groupby(['Filename', 'Language'])['Code Lines'].sum()

Tags: 数据pytravisyamldfrepojavafilename
2条回答

分组所依据的Filename对于要合并的行来说是不同的。您可以从groupby中删除该列,或者添加一个新列,该列对所有行都是相同的。你知道吗

对于您显示的数据帧:

df.groupby(['Language']).sum()

      Code Lines
Language            
C                 65
Java              32
Python            59
YAML              20

apply语句将每个文件上的名称按/拆分,并只重新连接前两个单词,因此如果整个数据帧不遵循该约定,请根据需要进行调整。你知道吗

还有一个新的专栏:

df['Repo'] = df['Filename'].apply(lambda st: '/'.join(st.split('/')[:2]))

df.groupby(['Repo', 'Language']).sum()

                  Code Lines
Repo        Language            

Repo/Repo_3 C                 65
            Java              32
            Python            59
            YAML              20

使用groupby就很简单了。但是,当您在另一列上进行聚合时,您打算如何保留这些文件名呢?你知道吗

我建议使用os.path.split从文件名中提取绝对目录路径,并对文件名和语言进行分组。你知道吗

import os

(df.assign(Filename=[os.path.split(v)[0] for v in df.Filename])
   .groupby(['Filename', 'Language'])
   .sum()
   .reset_index())

                       Filename Language  Value
0                   Repo/Repo_3        C     65
1                   Repo/Repo_3   Python     59
2                   Repo/Repo_3     YAML     20
3  Repo/Repo_3/chapter02/item01     Java     32 

相关问题 更多 >