我刚开始使用python因为这个问题。我从Counting particular occurrences in python in csv file读到了旧帖子,但是我无法计算它。
我的csv文件如下所示:
course year of birth sex
300 1998 w
300 1998 m
500 1995 w
我需要的是计算每一门课程每年出生的男性和女性人数。
我测试了用
导入csv文件的前15行print df[:15]
工作得很好。 但计数不起作用。我认为这是因为colum性的格式。它是字符串,因为f和m表示男性和女性课程参与者。
最后我想要一个像这样的csv文件:
course date of birth sex sum per sex
300 1981 m 5
300 1981 f 3
300 1982 m 1
300 1982 f 4
我尝试了以下代码:
import pandas as pd
df = pd.read_csv("myFile.csv")
for name, group in df.groupby(["course", "dateOfBirth"]):
print 'group name:', name
print 'group rows:'
print group
print 'sum per sex:'
print group["sex"].value_counts()
raw_input()
我玩改变了分组,但直到现在我还没有完全了解它是如何工作的。也许我想吃的面包对于一个绝对的初学者来说太大了; o)
感谢您的帮助!
我阅读了一些文档并让我的代码工作 - 至少它是每年和课程的性别。
因为我无法从Neo-X那里得到答案(非常感谢你的时间来回答我!)上班,我不得不在我的工作:
# Result should be a csc file like this:
#
# course year gender sum
# 200 1930 m 2
# 200 1930 w 1
# ...
# 300 1989 m 2
# 300 1989 f 2
# 300 1990 m 3
# 300 1990 f 2
#
import pandas as pd
df = pd.read_csv("course_year_gender.csv")
# check the first 15 rows if data looks okay:
print "--------------------------------------------------------"
print "Show the first 10 rows to check if file is ok"
print "--------------------------------------------------------"
print df[:15]
print "--------------------------------------------------------"
# empty line
print '\n'
# then we can group by gender and year and do work on each group:
print "--------------------------------------------------------"
print "Grouped data"
print "--------------------------------------------------------"
for name, group in df.groupby(["course", "year"]):
print "----------------------------"
print 'group name:', name
#print 'group rows:'
#print group
print 'Total per gender:'
print group["gender"].value_counts()
它返回:
...
group name: (300, 2010)
Total per gender:
f 2
m 2
Name: gender, dtype: int64
----------------------------
group name: (300, 2011)
Total per gender:
m 3
f 1
Name: gender, dtype: int64
----------------------------
group name: (300, 2012)
Total per gender:
m 7
f 5
Name: gender, dtype: int64
...
有关如何将输出作为csv表格的任何建议吗?像这样的东西
print group["course", "year", "gender"].value_counts()
没用。
非常感谢!
答案 0 :(得分:0)
您可以编码工作,您需要做的是创建一个新的数据框来存储分组数据的for
循环的结果。
请参阅Intro to Data Structures。
为了简化操作,您可能希望使用以下方法替换for
循环,然后将返回的series
数据存储到新数据框中。
df.groupby(['course', 'year', 'sex']).size()
数据
course, year, sex
300, 1998, f
300, 1998, f
300, 1998, m
300, 1995, m
500, 1995, f
500, 1998, m
给出
course year sex
300 1995 m 1
1998 f 2
m 1
500 1995 f 1
1998 m 1