2017-03-07 32 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

相關問題