将一个数据框中按照一个类别分类后,再按照这个类别下的另一个类别分类统计个数,再将第一个分类类别和个数按照第二个类别的相同排布做成一个数据框
时间: 2024-02-18 20:03:36 浏览: 26
可以使用 Pandas 库的 `groupby` 和 `pivot_table` 方法来实现这个功能。假设你有一个名为 `df` 的数据框,其中有两列 `category1` 和 `category2`,你想要按照 `category1` 分类,再按照 `category2` 统计个数,可以使用下面的代码:
```python
import pandas as pd
# 按照 category1 和 category2 分组,并统计个数
counts = df.groupby(['category1', 'category2']).size().reset_index(name='count')
# 将结果进行透视,按照 category2 作为列,category1 作为行,count 作为值
pivot_counts = counts.pivot_table(index='category1', columns='category2', values='count', fill_value=0)
# 将结果转换为数据框格式
result = pd.DataFrame(pivot_counts.to_records())
```
这样就可以得到一个按照 `category2` 排布的数据框,其中每行代表一个 `category1`,每列代表一个 `category2`,每个单元格中的值代表对应类别下的个数。
相关问题
将一个数据框中按照一个类别分类后,再按照这个类别下的另一个类别分类统计个数所占百分比,再将第一个分类类别和个数所占百分比按照第二个类别的相同排布做成一个数据框
你可以使用 Pandas 库的 `groupby` 和 `pivot_table` 方法来实现。假设你有一个名为 `df` 的数据框,其中有两列 `category1` 和 `category2`,你想按照 `category1` 分类,再按照 `category2` 统计百分比,可以使用下面的代码:
```python
import pandas as pd
# 按照 category1 和 category2 分组,并统计个数
counts = df.groupby(['category1', 'category2']).size().reset_index(name='count')
# 按照 category1 分组,统计总数
total_counts = counts.groupby(['category1']).agg({'count': 'sum'}).reset_index()
# 合并两个数据框,计算百分比
merged_counts = pd.merge(counts, total_counts, on='category1')
merged_counts['percent'] = merged_counts['count'] / merged_counts['sum']
# 将结果进行透视,按照 category2 作为列,category1 作为行,percent 作为值
pivot_counts = merged_counts.pivot_table(index='category1', columns='category2', values='percent', fill_value=0)
# 将结果转换为数据框格式
result = pd.DataFrame(pivot_counts.to_records())
```
这样就可以得到一个按照 `category2` 排布的数据框,其中每行代表一个 `category1`,每列代表一个 `category2`,每个单元格中的值代表对应类别下的百分比。
怎么将一个数据框中的一个列的分类变量作为标签,另一个分类变量的列的不同类别统计个数所占百分比按照相同的类别顺序作为每个标签的对应列表,最后两个变量形成一个字典
可以使用 pandas 的 groupby 和 apply 方法来实现。假设你的数据框为 df,要将列 A 的分类变量作为标签,列 B 的不同类别统计个数所占百分比按照相同的类别顺序作为每个标签的对应列表,最后形成一个字典,代码如下:
```python
import pandas as pd
# 假设列 A 和列 B 分别为 category 类型
# 统计列 B 的不同类别的个数占比
def count_pct(x):
return x.value_counts(normalize=True).to_dict()
# 将列 B 按照相同的类别顺序组成列表作为每个标签的对应列表
label_dict = df.groupby('A')['B'].apply(count_pct).to_dict()
```
这里利用了 pandas 中的 groupby 方法按照列 A 的类别进行分组,然后利用 apply 方法对每个分组的列 B 进行处理,将每个分组的列 B 统计不同类别的个数占比并转换成字典,最后再利用 to_dict 方法将分组结果转换成字典。注意,这里的 count_pct 函数返回的是一个字典,这个字典的键是列 B 的不同类别,值是对应的个数占比。如果你希望返回类别及其对应的个数,可以将 count_pct 函数中的 to_dict() 改成 value_counts().to_dict()。
另外,如果列 B 不是 'category' dtype,而是其他类型,那么在统计不同类别的个数占比时,可能需要先将其转换为 'category' dtype,例如:
```python
df['B'] = df['B'].astype('category')
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)