我刚开始使用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行
^{pr2}$效果很好。 但计数不起作用。我想这是因为sex专栏的格式。它是字符串,因为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()
没用。在
如果代码有效,则需要创建一个新的dataframe来存储分组数据的
for
循环的结果。 见Intro to Data Structures。在为了简化操作,您可能需要使用以下方法来替换
for
循环,然后将返回的series
数据存储到新的dataframe中。在数据
^{pr2}$给予
见Group By: split-apply-combine
相关问题 更多 >
编程相关推荐