我正在尝试使用Python的pandas包中的value_counts()函数来查找列中项目的频率。这可以工作并输出以下内容:
True
其中第一列是项目,右栏是列中的频率。
从那里开始,我想访问第一列项目并在for循环中迭代它。我希望能够访问每一行的项目并检查它是否等于另一个值。如果是这样,我希望能够访问第二列并将其除以另一个数字。
我的大问题是从.value_counts()输出访问第一列。是否可以访问此列,如果可以,如何访问?这些列没有任何特定的名称(因为它只是value_counts()输出)所以我不确定如何访问它们。
答案 0 :(得分:7)
value_counts
返回Pandas系列:
df = pd.DataFrame(np.random.choice(list("abc"), size=10), columns = ["X"])
df["X"].value_counts()
Out[243]:
c 4
b 3
a 3
Name: X, dtype: int64
对于单个值的数组,您可以使用Series的索引:
vl_list = df["X"].value_counts().index
Index(['c', 'b', 'a'], dtype='object')
它是“索引”类型,但您可以迭代它:
for idx in vl_list:
print(idx)
c
b
a
或者对于numpy数组,您可以使用df["X"].value_counts().index.values
答案 1 :(得分:7)
使用Panda的iteritems()
:
df = pd.DataFrame({'mycolumn': [1,2,2,2,3,3,4]})
for val, cnt in df.mycolumn.value_counts().iteritems():
print 'value', val, 'was found', cnt, 'times'
value 2 was found 3 times
value 3 was found 2 times
value 4 was found 1 times
value 1 was found 1 times
答案 2 :(得分:0)
您可以使用.keys()
或index
如下访问第一列:
df.column_name.value_counts().keys()
df.column_name.value_counts().index