pandas数据帧

时间:2017-12-01 16:41:48

标签: python pandas

以下是我尝试使用带有pandas的group by单个列的字数:

首先设置数据:

columns = ['col1','col2','col3']
data = np.array([['word1','word2','word3'] , ['word1','word5','word3'], ['word3','word7','word3']])
to_count = pd.DataFrame(data,columns=columns)

我正在尝试计算col1to_count中的字数。

to_count包含:

    col1   col2   col3
0  word1  word2  word3
1  word1  word5  word3
2  word3  word7  word3

计算我使用的单词:

print(to_count.groupby('col1').count())

显示:

col2  col3
col1             
word1     2     2
word3     1     1

这似乎部分正确,因为返回了单词count,但它们分布在多个列中。如何访问单个列的字数? 我只能访问字数统计数据框中的单个列,但这似乎不正确。

3 个答案:

答案 0 :(得分:1)

如果我理解正确,我认为这就是您正在寻找的:

db.getCollection('Submissions').update(
{
    "data": {$elemMatch:{
        label:"Level 2", 
        value: {$ne: ""}}},
    "data": {$elemMatch:{
        label:"Level"
    }}
},{})

输出:

print(to_count.groupby('col1')['col1'].count())

答案 1 :(得分:0)

您可以将value_counts()fn应用于数据帧的一列。下面逐个应用所有列:

for onecol in to_count:
    print(onecol, ":\n", to_count[onecol].value_counts())

输出:

col1 :
word1    2
word3    1
Name: col1, dtype: int64
col2 :
word5    1
word2    1
word7    1
Name: col2, dtype: int64
col3 :
word3    3
Name: col3, dtype: int64

答案 2 :(得分:0)

这个怎么样:

单栏:

df['col1'].value_counts()

将返回:

word1    2
word3    1

所有列:

df.apply(lambda col: col.value_counts()).fillna(0).astype(int)

将返回:

       col1  col2  col3
word1     2     0     0
word2     0     1     0
word3     1     0     3
word5     0     1     0
word7     0     1     0

复制&粘贴示例:

from io import StringIO
import pandas as pd

data = """
    col1   col2   col3
0  word1  word2  word3
1  word1  word5  word3
2  word3  word7  word3
"""

df = pd.read_table(StringIO(data), sep='\s+')

print(df['col1'].value_counts())
print(df.apply(lambda col: col.value_counts().astype(int)).fillna(0).astype(int))