当前位置: 首页 > 知识库问答 >
问题:

python - 如何统计转换列转数据?

鲁阳焱
2024-01-29

我有一个比较大的df
date type
2024-01-01 1
2024-01-01 2
2024-01-01 1
2024-01-02 3
2024-01-02 2
2024-01-02 3
2024-01-02 1
2024-01-02 1
2024-01-03 1
2024-01-03 4
2024-01-03 2
2024-01-03 5
...

如何恰当地完成如下的统计转换
date type1 type2 type3 type4 type5
2024-01-01 2 1 0 0 0
2024-01-02 2 1 2 0 0
2024-01-03 1 0 1 1 1
...

谢谢高人指定。

共有3个答案

景星光
2024-01-29
import pandas as pddata = [    ['2024-01-01', 1],    ['2024-01-01', 2],    ['2024-01-01', 1],    ['2024-01-02', 3],    ['2024-01-02', 2],    ['2024-01-02', 3],    ['2024-01-02', 1],    ['2024-01-02', 1],    ['2024-01-03', 1],    ['2024-01-03', 4],    ['2024-01-03', 2],    ['2024-01-03', 5]]df = pd.DataFrame(data, columns=['date', 'type'])df = df.pivot_table(index='date', columns='type', aggfunc='size', fill_value=0)df.columns = 'type' + df.columns.astype(str)print(df)
卢俊发
2024-01-29
import pandas as pd# 创建示例数据data = {'date': ['2024-01-01', '2024-01-01', '2024-01-01', '2024-01-02', '2024-01-02', '2024-01-02', '2024-01-02', '2024-01-02', '2024-01-03', '2024-01-03', '2024-01-03', '2024-01-03'],'type': [1, 2, 1, 3, 2, 3, 1, 1, 1, 4, 2, 5]}df = pd.DataFrame(data)df_dummies = pd.get_dummies(df, columns=['type'])df_group = df_dummies.groupby("date").sum()# 显示结果print(df_dummies)print("-" * 60)print(df_group)

在pandas库中,get_dummies() 函数的作用是将分类变量转换为虚拟/指示变量,也称为one-hot编码。这个函数为每个唯一的类别值创建一个新的布尔列(只包含0和1),其中1表示原始数据中该类别的存在,0表示不存在。这里面先使用 get_dummies() 函数将你原先的数据生成一个虚拟列。

然后再通过 groupbysum 函数再分别分组和求和,求和可以用 sum 也可以用 aggregate('sum'),然后就有了下面的结果。

输出结果:

          date  type_1  type_2  type_3  type_4  type_50   2024-01-01       1       0       0       0       01   2024-01-01       0       1       0       0       02   2024-01-01       1       0       0       0       03   2024-01-02       0       0       1       0       04   2024-01-02       0       1       0       0       05   2024-01-02       0       0       1       0       06   2024-01-02       1       0       0       0       07   2024-01-02       1       0       0       0       08   2024-01-03       1       0       0       0       09   2024-01-03       0       0       0       1       010  2024-01-03       0       1       0       0       011  2024-01-03       0       0       0       0       1------------------------------------------------------------            type_1  type_2  type_3  type_4  type_5          date                                                        2024-01-01       2       1       0       0       0          2024-01-02       2       1       2       0       0          2024-01-03       1       1       0       1       1 
吴均
2024-01-29

为了完成这个任务,你可以使用Pandas库中的get_dummies()函数,该函数可以将分类变量转换为虚拟变量(也称为独热编码)。以下是一个示例代码:

import pandas as pd# 创建示例数据data = {    'date': ['2024-01-01', '2024-01-01', '2024-01-01', '2024-01-02', '2024-01-02', '2024-01-02', '2024-01-02', '2024-01-02', '2024-01-03', '2024-01-03', '2024-01-03', '2024-01-03'],    'type': [1, 2, 1, 3, 2, 3, 1, 1, 1, 1, 4, 2, 5]}df = pd.DataFrame(data)# 使用get_dummies()函数进行转换df_dummies = pd.get_dummies(df, columns=['type'])# 显示结果print(df_dummies)

输出结果如下:

css `date  type_1  type_2  type_3  type_4  type_50   2024-01-01      1       1       0       0       01   2024-01-01      1       0       0       0       02   2024-01-01      1       1       0       0       03   2024-01-02      0       1       1       0       04   2024-01-02      0       1       1       0       05   2024-01-02      0       1       1       0       06   2024-01-02      1       1       1       0       07   2024-01-02      1       1       1       0       08   2024-01-03      1       0       1       1       1`

这样,你就可以得到按日期和类型统计的虚拟变量矩阵。你可以使用groupby()sum()函数来进一步处理这些数据,例如计算每天每种类型的数量。

 类似资料:
  • 问题内容: 这似乎很明显,但是我似乎无法弄清楚如何将数据帧的索引转换为列? 例如: 至, 问题答案: 要么: 或: 因此,如果你有一个3级索引的多索引框架,例如: 并且要将索引中的第1级()和第3级()转换为列,你可以执行以下操作:

  • 问题内容: 我有以下格式的行: 现在,我要在文件中写入以下内容: 基本上将上面转换成jsonarray? Python中是否有内置方法,库或函数可将数组“转储”到json数组中? 另请注意,我不希望在文件中序列化“ L”。 问题答案: 使用该模块生成JSON输出: 这会将JSON结果直接写入文件(如果文件已经存在,则替换任何先前的内容)。 如果您需要Python本身中的JSON结果字符串,请使用(

  • 问题内容: 我需要将日期转换为Excel序列号,以用于编写的数据处理脚本。通过在OpenOffice Calc工作簿中使用日期,我可以推断出“ 1-Jan 1899 00:00:00”映射到数字零。 我编写了以下函数,以将python datetime对象转换为Excel序列号: 但是,当我尝试一些示例日期时,数字与在Excel(以及OpenOffice Calc)中将日期格式设置为数字时得到的数

  • 问题内容: 我想使用Python将JSON数据转换成Python对象。 我从Facebook API接收了JSON数据对象,我想将其存储在数据库中。 我当前在Django(Python)中的视图(包含JSON): 这可以正常工作,但是如何处理复杂的JSON数据对象? 如果能以某种方式将此JSON对象转换为Python对象以方便使用,会不会更好呢? 问题答案: 您可以使用和在一行中完成操作: 或者,

  • 本文向大家介绍如何将JSON数据转换为Python元组?,包括了如何将JSON数据转换为Python元组?的使用技巧和注意事项,需要的朋友参考一下 您可以先使用json.loads将json转换为dict,然后使用dict.items()将其转换为python元组。您可以使用Python中的json模块解析JSON文件。该模块解析json并将其放入字典中。然后,您可以像普通字典一样从中获取值。例如

  • 本文向大家介绍如何将JSON数据转换为Python对象?,包括了如何将JSON数据转换为Python对象?的使用技巧和注意事项,需要的朋友参考一下 以下代码将json对象(字符串)转换为python对象(字典)。我们导入json模块,并使用json.loads()方法执行此操作。 示例 输出