(我确信这是一个重复的问题 - 对不起,我无法弄清楚这一点。)
我有数百个* 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&#39;中的项目数,并在&#34;主表&#34;中为每个文件输出这些统计信息,每行一个文件名,例如< / p>
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
我正在制造的n00b错误是什么?
答案 0 :(得分: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)