Python 根据dupliacte列名添加和
对于以下数据帧dfPython 根据dupliacte列名添加和,python,python-3.x,pandas,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_
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()
您分组所依据的
文件名
与您尝试合并的行不同。您可以从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
中删除该列,或者添加一个对所有行都相同的新列
仅针对您显示的数据帧:
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
使用
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
工作正常有一个错误“DataFrameGroupBy”对象没有属性“Value”,所以更改了它(df.assign(文件名=[os.path.split(v)[0]表示df.Filename中的v])。groupby(['Filename','Language'])。sum().reset_index())工作正常有一个错误“DataFrameGroupBy”对象没有属性“Value”,所以更改了它(df.assign(文件名=[os.path.split(v)[0]用于df.Filename中的v]).groupby(['Filename','Language']).sum().reset_index())