我有数据框。“
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'])
'我也尝试使用数据透视表,但无法获得此输出。
3条答案
按热度按时间ee7vknir1#
您可以执行
pivot
,然后在列上运行groupby.first
以删除不需要的列:输出量:
其优点是可以维护数据类型:
uurv41yg2#
从您的数据中,因为您在'NumericalValues'或'CategoricalValues'中有一个值,所以您可以创建一个列,用
fillna
合并这两个列中的所有信息,然后像以前那样使用pivot
。ovfsdjhp3#
另一种可能的解决方案是使用
pandas.pivot_table
:输出量:
数据类型: