熊猫根据对偶列名称添加和

时间:2018-07-28 20:16:41

标签: python python-3.x pandas

对于以下数据框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()

2 个答案:

答案 0 :(得分:1)

您要分组的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

答案 1 :(得分:1)

使用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