我有如下 DataFrame:
df = pd.DataFrame([
("i", 1, 'GlIrbixGsmCL'),
("i", 1, 'GlIrbixGsmCL'),
("i", 1, '3IMR1UteQA'),
("c", 1, 'GlIrbixGsmCL'),
("i", 2, 'GlIrbixGsmCL'),
], columns=['type', 'cid', 'userid'])
预期输出如:更多详情:
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来获得预期的结果?相关截图:
最佳答案
这就是我将如何处理这个:
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/