【问题标题】:Pandas DataFrame read_csv then GroupBy - How to get just a single count instead of one per columnPandas DataFrame read_csv 然后 GroupBy - 如何只获得一个计数而不是每列一个
【发布时间】:2021-05-26 23:16:46
【问题描述】:

我得到了我想要的计数,但我不明白为什么要为每个数据列创建单独的计数。如何只创建一个名为“count”的列?仅当列为 Null (NAN) 值时,计数是否会有所不同?

另外,下面的实际列名是什么?列名是元组吗?

我可以更改 groupby/agg 以仅返回一个名为“Count”的列吗?

CSV 数据:

'Occupation','col1','col2'
'Carpenter','data1','x'
'Carpenter','data2','y'
'Carpenter','data3','z'
'Painter','data1','x'
'Painter','data2','y'
'Programmer','data1','z'
'Programmer','data2','x'
'Programmer','data3','y'
'Programmer','data4','z'

计划:

filename = "./data/TestGroup.csv"

df = pd.read_csv(filename)
print(df.head())

print("Computing stats by HandRank... ")
df_stats = df.groupby("'Occupation'").agg(['count'])
print(df_stats.head())

print("----- Columns-----")
for col_name in df_stats.columns:
   print(col_name)

输出:

    Computing stats by HandRank... 
                 'col1' 'col2'
                  count  count
    'Occupation'              
    'Carpenter'       3      3
    'Painter'         2      2
    'Programmer'      4      4

----- Columns-----
("'col1'", 'count')
("'col2'", 'count')

df.head() 显示它使用“职业”作为我的列名。

【问题讨论】:

  • 应该包括nans吗?您在寻找df_stats = df.groupby("'Occupation'").size().reset_index(name='Count') 吗? count 默认不计算 NaN
  • df['Occupation'].value_counts().to_frame(name='count').
  • @QuangHoang - 你为什么不把它作为答案而不是评论?我更喜欢它,因为它不会在结果 df_stats 中留下列名。我不得不更改为: df_stats = df["'Occupation'"].value_counts().to_frame(name='count') (它使用 CSV 中的引号,因此字段名包含引号)。

标签: pandas dataframe count


【解决方案1】:

试试size

df_stats = df.groupby("'Occupation'").size().to_frame('count')

【讨论】:

  • 谢谢,效果很好!知道为什么我的尝试和您的回答都将“职业”(列标题)留在 df_stats 中吗?它不知道那是一个列名,那么为什么要把它包括在计数中呢?默认情况下,我认为 read_csv 使用第一行作为列名。
  • @NealWalters 是索引名称,所以你可以添加 df_stats.rename_axis(None)
猜你喜欢
  • 2021-05-26
  • 1970-01-01
  • 2020-03-04
  • 1970-01-01
  • 1970-01-01
  • 2018-03-07
  • 2013-07-14
  • 2015-07-22
相关资源
最近更新 更多