python - 让 size() 或 groupby & count 跨所有列工作
问题描述
抱歉,如果这似乎是重复的,我发现很多使用 groupby 和 size 的接近答案,但没有一个将列标题作为索引返回。
我有以下 df (实际上有 340 列和许多行):
import pandas as pd
data = {'Name_Clean_40_40_Correct':['0','1','0','0'], 'Name_Clean_40_80_Correct':['0','1','1','N/A'],'Name_Clean_40_60_Correct':['N/A','N/A','0','1']}
df_third = pd.DataFrame(data)
我正在尝试计算每列的“0”、“1”和“N/A”的实例。所以我想让索引是列名,列是'0'、'1'和'N/A'。
我正在尝试这个,但恐怕它效率很低或不正确,因为它不会完成。
def countx(x, colname):
df_thresholds=df_third.groupby(colname).count()
for col in df_thresholds.columns:
df_thresholds[col + '_Count'] = df_third.apply(countx, axis=1, args=(col,))
我可以为一栏做到这一点,但这会很痛苦:
df_thresholds=df_third.groupby('Name_Clean_100_100_Correct').count()
df_thresholds=df_thresholds[['Name_Raw']]
df_thresholds=df_thresholds.T
解决方案
如果我理解正确,这应该有效:
df_third.apply(pd.Series.value_counts)
结果:
Name_Clean_40_40_Correct ... Name_Clean_40_60_Correct
0 3.0 ... 1
1 1.0 ... 1
N/A NaN ... 2
顺便说一句:只选择包含“正确”的列:
df_third.filter(like='Correct')
转置形式df_third.T
:
0 1 N/A
Name_Clean_40_40_Correct 3.0 1.0 NaN
Name_Clean_40_80_Correct 1.0 2.0 1.0
Name_Clean_40_60_Correct 1.0 1.0 2.0
推荐阅读
- jquery - Laravel - 如何在 Laravel 中使用 jQuery AJAX ( $.ajax({}) ) 来执行特定操作?
- powershell-2.0 - 如何使用 PowerShell 在 Windows 7 上自动登录多个用户帐户?
- python - 有没有办法让输出中心本身在 tkinter 中?
- orbeon - Orbeon 动态 Html 标签被复制
- python - 如何比较熊猫数据框中组中的多行?
- javascript - 使属性变得懒惰
- python - Is there a way to create JSON from .csv without importing csv?
- binary - 逗号分隔的二进制参数?- 灵药
- logging - 用 gunicorn 登录烧瓶
- excel - 如果当前月份是 1 月,则创建一个采用上一年汇率的新列