2017-03-07 35 views
0

(我相信这是一个重复的问题---我很抱歉,我不明白这一点。)计数范畴值总数列中为整个数据框

我有上百个* CSV文件据此我想计算一列的分类变量。谢天谢地,这些文件已经被清理完毕,因此它们具有保存格式。表格格式的一个例子的文件:

import pandas as pd 
import numpy as np 
df = pd.DataFrame({"column1": ["value1", "value2", "value3", "value4", "value5", "value6", "value7"], 
        "column2" : ["element_A", "element_A", "element_B", "element_A", "element_B", "element_B", "element_A"], 
        "column3" : ["item22", "item6", "item7", "item42", "item49", "item91", "item3"], 
        "column4" : ["abc", "edf", "edf", "abc", "edf", "xyz", "abc"]}) 
df = df[["column1", "column2", "column3", "column4"]] 


df 

输出

column1 column2  column3 column4 
0 value1 element_A item22 abc 
1 value2 element_A item6 edf 
2 value3 element_B item7 edf 
3 value4 element_A item42 abc 
4 value5 element_B item49 edf 
5 value6 element_B item91 xyz 
6 value7 element_A item3 abc 

对于每个文件,我想计数`column4' 项目的这些统计信息用于在每个文件的数量,并输出“主表”,每行一个文件名,例如

  abc def xyz 
filename1 3  3  1 
filename2 42  0  7 
filename3 0  16  4 
filename4 4  71  21 
.... 

我的方法是每glob文件名,然后计数使用groupby。当然

import pandas as pd 
import glob 

final = pd.Dataframe() 
files = glob.glob("*.csv") 
for filename in files: 
    df = pd.read_table(filename) 
    df["filename"] = str(filename) 
    df = df.groupby("column4").count().unstack("column4").fillna(0).astype(int) 
    final = final.append(df, ignore_index=True) 

,这里有一个错误::不过,我遇到了一个错误

df = df.groupby("column4").count().unstack("column4").fillna(0).astype(int) 

由于这将在df

  column4 
column1 abc  3 
     edf  3 
     xyz  1 
column2 abc  3 
     edf  3 
     xyz  1 
column3 abc  3 
     edf  3 
     xyz  1 
dtype: int64 

计算每列的值是什么我正在犯的错误是什么?

回答

1

我认为你应该使用value_counts,像这样:

final = pd.DataFrame() 
for filename in files: 
    df = pd.read_table(filename) 
    new_row = df['column4'].value_counts().set_value('filename', filename) 
    final = final.append(new_row, ignore_index=True) 
+0

这工作出色,谢谢 – ShanZhengYang

相关问题