如何按列值的计数进行分组并对其进行排序?
Posted
技术标签:
【中文标题】如何按列值的计数进行分组并对其进行排序?【英文标题】:How can I group by the count number of column values and sort it? 【发布时间】:2017-12-13 01:37:04 【问题描述】:如何按列值的计数进行分组并排序?
我是熊猫学习者。
我有一个名为 data.log 的原始数据框。现在我想按'c-ip-1'计算数字组,并对结果进行排序。
原始data.log:
sc-status sc-substatus sc-win32-status time-taken c-ip-1
0 200 0 0 986 31.7.188.55
1 200 0 0 2539 31.7.188.55
2 200 0 0 1172 31.7.188.56
3 200 0 0 3152 31.7.188.80
4 200 0 0 1091 31.7.188.80
...
99 200 0 0 1115 31.9.200.60
100 200 0 0 2000 31.9.200.61
预期结果如下:
c-ip-1 count
0 31.7.188.56 1
1 31.9.200.61 1
2 31.7.188.55 2
...
34 31.9.200.60 5
我尝试编写python代码并运行它,但是失败了:
import pandas as pd
df = pd.read_table('data.log', sep=" ")
print(df[['c-ip-1']].groupby(['c-ip-1']).agg(['count'])
如何使用python解决问题?
【问题讨论】:
【参考方案1】:我认为您需要通过GroupBy.size
聚合,然后是Series.sort_values
,最后是Series.reset_index
:
#better is more general separator `\s+` - one or more whitespaces
df = pd.read_table('data.log', sep="\s+")
df1 = df.groupby('c-ip-1').size().sort_values().reset_index(name='count')
print (df1)
c-ip-1 count
0 31.7.188.56 1
1 31.9.200.60 1
2 31.9.200.61 1
3 31.7.188.55 2
4 31.7.188.80 2
What is the difference between size and count in pandas?
【讨论】:
【参考方案2】:您可以使用pd.Series.value_counts
。默认情况下,它按计数大小的降序排序。您可以传递参数ascending=False
来反转它。然后重命名轴和列
df['c-ip-1'].value_counts(ascending=True) \
.rename_axis('c-ip-1').reset_index(name='count')
c-ip-1 count
0 31.9.200.61 1
1 31.9.200.60 1
2 31.7.188.56 1
3 31.7.188.55 2
4 31.7.188.80 2
【讨论】:
我会感谢一些关于否决票的反馈。我希望有机会解决任何问题【参考方案3】:df[['c-ip-1']].groupby(['c-ip-1']).agg(c=('type', 'count')).sort_values("c")
【讨论】:
以上是关于如何按列值的计数进行分组并对其进行排序?的主要内容,如果未能解决你的问题,请参考以下文章