在pandas列中计算每个值发生的次数

2024-04-26 12:16:42 发布

您现在位置:Python中文网/ 问答频道 /正文

import pandas as pd 

test_values = []

test_values.append(np.array([1,0,1]))
test_values.append(np.array([1,0,1]))
test_values.append(np.array([0,1,1]))

test_values

df = pd.DataFrame(test_values)

呈现此数据帧将生成:

^{pr2}$

我试图计算每个值在列中出现的次数,因此对于上面的数据帧,应该生成以下内容:

1 occurs 2, 0 occurs 0. 
0 occurs 2, 1 occurs 1. 
1 occurs 3, 0 occurs 0.

使用.values():

for i in range(0 , df.shape[1]) : 
    print(df.iloc[:,i].value_counts().values)

产生:

[2 1]
[2 1]
[3]

标签已从每列中删除。如何访问每个计数的相关标签?因此可以产生:

1 occurs 2, 0 occurs 0. 
0 occurs 2, 1 occurs 1. 
1 occurs 3, 0 occurs 0.

Tags: 数据testimportdataframepandasdfasnp
3条回答

您可以通过^{}迭代一个序列:

for i in range(0 , df.shape[1]):
    counts = df.iloc[:,i].value_counts()
    gen = (f'{key} occurs {value} times' for key, value in counts.items())
    print(*gen, sep=', ')

现在还不清楚如何推导零计数,所以我没有假设这是一个要求。结果表明:

^{pr2}$

如果只有01值,则添加^{}以添加缺少的值-按预期值列表重新编制索引:

for i in range(0 , df.shape[1]) : 
    a = df.iloc[:,i].value_counts().reindex([0,1], fill_value=0)
    print (', '.join('{} occurs {}.'.format(k, v) for k, v in a.items()))

0 occurs 1., 1 occurs 2.
0 occurs 2., 1 occurs 1.
0 occurs 0., 1 occurs 3.

简单解决方案:

df.apply(pd.Series.value_counts)

相关问题 更多 >