python groupby统计一列项的频数
时间: 2024-06-03 09:06:01 浏览: 8
Python中的groupby函数可以用于按照指定的键对数据进行分组,然后对每个分组进行统计操作。我们可以使用它来统计一列项的频数。
假设有如下数据:
```
data = [1, 2, 3, 2, 1, 3, 4, 5, 4, 3, 2]
```
我们可以使用groupby函数将这些数据按照值进行分组,并统计每个值的出现次数。具体实现如下:
```
from itertools import groupby
data = [1, 2, 3, 2, 1, 3, 4, 5, 4, 3, 2]
# 对数据进行排序
data_sorted = sorted(data)
# 分组并统计每个值的出现次数
result = [(key, len(list(group))) for key, group in groupby(data_sorted)]
# 输出结果
print(result)
```
输出结果为:
```
[(1, 2), (2, 3), (3, 3), (4, 2), (5, 1)]
```
其中,每个元组表示一个分组,第一个元素为分组的键(即每个不同的值),第二个元素为该值出现的次数。
相关问题
python dataframe分组统计频数并画出折线图
可以使用 pandas 库中的 groupby 方法对 dataframe 进行分组统计频数,然后使用 matplotlib 库中的 plot 方法画出折线图。具体实现可以参考以下代码:
```python
import pandas as pd
import matplotlib.pyplot as plt
# 创建一个 dataframe
df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C': [1, 2, 3, 4, 5, 6, 7, 8]})
# 对 A 和 B 列进行分组统计频数
grouped = df.groupby(['A', 'B']).size()
# 画出折线图
grouped.plot(kind='line')
# 显示图形
plt.show()
```
这段代码会先创建一个 dataframe,然后对 A 和 B 列进行分组统计频数,最后画出折线图并显示出来。
groupby函数中如何算组中值、频数、频率、累计频率
在groupby函数中,可以使用agg方法来计算组中的值、频数、频率和累计频率。具体实现方法如下:
1. 计算组中的值:使用agg方法,传入一个字典,字典的key为列名,value为对应的计算方法,例如:{'列名': 'mean'}表示计算该列的平均值。
2. 计算组中的频数:使用agg方法,传入一个字典,字典的key为列名,value为'count',表示计算该列的非空值数量。
3. 计算组中的频率:先计算组中的频数,再除以该组的总数。
4. 计算组中的累计频率:先计算组中的频率,再使用cumsum方法计算累计和。
示例代码如下:
```python
import pandas as pd
# 创建一个DataFrame
df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C': [1, 2, 3, 4, 5, 6, 7, 8]})
# 使用groupby函数分组,并计算组中的值、频数、频率和累计频率
result = df.groupby(['A', 'B']).agg({'C': ['mean', 'count']})
result['频率'] = result['C']['count'] / result['C']['count'].sum()
result['累计频率'] = result['频率'].cumsum()
print(result)
```
输出结果如下:
```
C 频率 累计频率
mean count
A B
bar one 2.0 1 0.125000 0.125000
three 4.0 1 0.125000 0.250000
two 4.0 2 0.250000 0.500000
foo one 4.0 2 0.250000 0.750000
three 8.0 1 0.125000 0.875000
two 4.0 1 0.125000 1.000000
```