python - 如何使用 Pandas 进行数据分析(如计数、ucounts、频率)?

标签 python pandas pandas-groupby data-analysis

我有如下 DataFrame:

df = pd.DataFrame([
    ("i", 1, 'GlIrbixGsmCL'),
    ("i", 1, 'GlIrbixGsmCL'),
    ("i", 1, '3IMR1UteQA'),
    ("c", 1, 'GlIrbixGsmCL'),
    ("i", 2, 'GlIrbixGsmCL'),
], columns=['type', 'cid', 'userid'])
预期输出如:
expect output
更多详情:
i_counts, c_counts      => df.groupby(["cid","type"]).size()
i_ucounts, c_ucounts    => df.groupby(["cid","type"])["userid"].nunique()
i_frequency,u_frequency => df.groupby(["cid","type"])["userid"].value_counts()
看起来对我来说有点复杂,如何使用pandas来获得预期的结果?
相关截图:
screenshots

最佳答案

这就是我将如何处理这个:

aggfuncs= {
    'counts': ('userid', 'count'), 
    'ucounts': ('userid', 'nunique'),
    'frequency': ('userid', lambda S: S.value_counts().to_dict()),
}

output = df.groupby(['cid', 'type']).agg(**aggfuncs).unstack()
output.columns = output.columns.map(lambda tup: '_'.join(tup[::-1]))
输出:
     c_counts  i_counts  c_ucounts  i_ucounts          c_frequency                           i_frequency
cid
1         1.0       3.0        1.0        2.0  {'GlIrbixGsmCL': 1}  {'GlIrbixGsmCL': 2, '3IMR1UteQA': 1}
2         NaN       1.0        NaN        1.0                  NaN                   {'GlIrbixGsmCL': 1}
我认为这是你想要的核心。您将需要进行一些外观修改才能获得与您的示例完全相同的输出(例如 fillna 等)。

关于python - 如何使用 Pandas 进行数据分析(如计数、ucounts、频率)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67757620/

相关文章:

python - 如果列值具有字符串,则根据条件对数据框进行子集

python - 如何使用一个键将多个列表值的数据框制作成python中的字典?

python - 仅在数据到达时管道

python - 使用 pandas.read_csv 设置标题

当最终类没有 __init__ 时不调用 Python mixin 构造函数

python - 比较两个数据框列的匹配百分比

python - 数据库访问生成器函数有优势吗?

python - 每张工作表有多个数据框,每个工作簿有多个工作表

python - 使用 NaT 值对 Pandas 数据框进行排序

pandas - 使用 Pandas GroupBy 和重新采样保留最大值的时间