python-3.x - 如何使用多个列值对 pandas 数据框进行数据透视表/数据透视表

标签 python-3.x pandas pivot pivot-table data-wrangling

我有数据框。 `

data = pd.DataFrame([['Benz', 'MinSpeed', 0, np.nan, 'USA', '2022-08-12'],
                     ['Benz', 'TopSpeed', 200, np.nan, 'USA', '2022-08-12'],
                     ['Benz', 'ChasisNum', 654121, np.nan, 'USA', '2022-08-12'],
                     ['Benz', 'Seats', 5, np.nan, 'USA', '2022-08-12'],
                     ['Benz', 'AirBags', 5, np.nan, 'USA', '2022-08-12'],
                     ['Benz', 'VehicleType', np.nan, 'Sedan', 'USA', '2022-08-12'],
                     ['Benz', 'Color', np.nan, 'Black','USA', '2022-08-12'],
                     ['Benz', 'InternetInside', np.nan, 'Yes','USA', '2022-08-12'],
                     
                     ['Ferrari', 'MinSpeed', 0, np.nan, 'France', '2022-12-25'],
                     ['Ferrari', 'TopSpeed', 250, np.nan, 'France', '2022-12-25'],
                     ['Ferrari', 'ChasisNum', 781121, np.nan, 'France', '2022-12-25'],
                     ['Ferrari', 'Seats', 4, np.nan, 'France', '2022-12-25'],
                     ['Ferrari', 'AirBags', 2, np.nan, 'France', '2022-12-25'],
                     ['Ferrari', 'VehicleType', np.nan, 'SUV', 'France', '2022-12-25'],
                     ['Ferrari', 'Color', np.nan, 'Red','France', '2022-12-25'],
                     ['Ferrari', 'InternetInside', np.nan, 'No','France', '2022-12-25'],
                     ], 
                    columns= ['CarModel', 'Features', 'NumericalValues', 'CategoricalValues','Country', 'DeliveryDate'])

`

我正在尝试使用数据透视函数对数据进行透视,但得到“NumericalValues”和“CategoricalValues”值的重复列

代码: `

data.pivot(index='CarModel', columns='Features', values=['NumericalValues','CategoricalValues' ]).reset_index()

`

我需要预期的输出: `

output_data = pd.DataFrame([['Benz', 0, 200, 654121, 5, 5, 'Sedan', 'Black', 'Yes', 'USA', '2022-08-12'],
                         ['Ferrari', 0, 250, 781121, 4, 2, 'SUV', 'Red', 'No', 'France', '2022-12-25']
                     ],
                    columns=['CarModel', 'MinSpeed', 'TopSpeed', 'ChasisNum','Seats', 'AirBags', 'VehicleType', 'Color', 'InternetInside', 'Country', 'DeliveryDate'])

` 我也尝试使用数据透视表,但无法获得此输出。

最佳答案

您可以执行pivot,然后运行groupby.first在列上删除不需要的列:

out = (data
  .pivot(index=['CarModel', 'Country', 'DeliveryDate'],
         columns='Features'
        )
  .groupby(level='Features', axis=1).first()
  .reset_index()
)

输出:

Features CarModel Country DeliveryDate  AirBags  ChasisNum  Color InternetInside  MinSpeed  Seats  TopSpeed VehicleType
0            Benz     USA   2022-08-12      5.0   654121.0  Black            Yes       0.0    5.0     200.0       Sedan
1         Ferrari  France   2022-12-25      2.0   781121.0    Red             No       0.0    4.0     250.0         SUV

优点是它保留了数据类型:

Features
CarModel           object
Country            object
DeliveryDate       object
AirBags           float64
ChasisNum         float64
Color              object
InternetInside     object
MinSpeed          float64
Seats             float64
TopSpeed          float64
VehicleType        object
dtype: object

关于python-3.x - 如何使用多个列值对 pandas 数据框进行数据透视表/数据透视表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74547796/

相关文章:

sql - 使用单个 SQL 语句选择多个 max() 值

python - 我如何复制 PyCharm 在命令行运行我的 Python 3.4 项目的方式?

mysql - 如何修复Failed building wheel for mysqlclient in flask的错误

python - 获取 Pandas 中多个日期时间列的最小值

sql - 在 SQL Server 中将行转换为列不起作用?

sql - 没有子查询的表的多次传递

html - Django:在导航栏中突出显示当前页面

python - 寻求有关安装 numpy 扩展的帮助

python - 根据其他列中先前的值填充新列

python - KeyError 更改数据框中的列