熊猫根据另一列中的输入来创建具有特定值的列

时间:2020-06-15 18:01:22

标签: python pandas csv

在我的csv文件中,我有一列“类别”,在这里我需要为每个类别设置一个垂直字段并将值保存在新的附加列中。我知道如何读取csv并将数据帧保存到一个新文件中,包括在Pandas中创建的新列。但是我需要一些有关场景逻辑的帮助。

my.csv:

id            category
1    auto,auto.car_dealers
2    hotelstravel,hotelstravel.hotels
3    shopping,shopping.homeandgarden,shopping.homeandgarden.appliances
4    financialservices,financialservices.insurance
5    
6    realestate
7    pets,pets.petservices,pets.petservices.petinsurance
8    homeservices,homeservices.windowsinstallation
9    professional

我需要应用的规则: 1.如果类别列没有值,则设置垂直列=其他 2.如果类别列具有值,则检查值是否为单个单词,然后根据值设置垂直。如果将auto设置为Automotive,则将hoteltravel设置为Travel等。 3.如果value有多个单词,则在第一个逗号之前使用单词,并根据类别设置垂直值。如果将“自动”设置为“汽车”,则将“酒店旅行”设置为“旅行”等。

预期的output.csv:

id            category                                                       vertical 
1    auto,auto.car_dealers                                                   Automotive
2    hotelstravel,hotelstravel.hotels                                        Travel
3    shopping,shopping.homeandgarden,shopping.homeandgarden.appliances       Retail
4    financialservices,financialservices.insurance                           Financial
5                                                                            Other
6    realestate                                                              Real Estate
7    pets,pets.petservices,pets.petservices.petinsurance                     Pet Services
8    homeservices,homeservices.windowsinstallation                           Home Services
9    professional                                                            Professional Services
到目前为止,我的代码:

import pandas as pd
df = pd.read_csv('path/to/my.csv')

#do something here and then something like
df.loc[df['category'] == 'auto', 'vertical'] = 'Automotive'

df.to_csv('path/to/output.csv', index=False)

任何对此的帮助将不胜感激。先感谢您!

1 个答案:

答案 0 :(得分:1)

您可能需要遍历类别列并对值进行检查。您可以在以下(more info)中使用某些内容:

for index, row in df.iterrows():
    if (row['Category'].is_a_list()):
        tokens = row['Category'].split()
        row['Vertical'] = tokens[0]
    else:
         ....

并且由于您想将值(即“ hotelstravel”更改为“ Travel”),因此可能需要设置一个词典,以“类别”名称作为键,并以“垂直”名称作为值,以便您可以快速将其转换