【问题标题】:How to Add a New Column With Selected Values from Another Column In Python如何在 Python 中从另一列中添加具有选定值的新列
【发布时间】:2014-05-19 03:12:01
【问题描述】:

我整天都在想办法解决这个问题。我是 Python 新手。

我有一个包含大约 50,000 条记录的表。但下表将解释我正在尝试做的事情。

我想添加第三列,称为类别。此列将包含基于电影列上设置的条件的值的结果。

-----------------------------------------
N     | Movies               
-----------------------------------------
1        | Save the Last Dance 
-----------------------------------------
2        | Love and Other Drugs
---------------------------------------
3        | Dance with Me      
---------------------------------------
4        | Love Actually       
---------------------------------------
5        | High School Musical
----------------------------------------

条件是这样的;在“电影”列中搜索这些词 {Dance、Love 和 Musical)。如果在字符串中找到该单词,则返回 Category 列中的单词。

这将在最后产生一个像这样的新数据框;

-----------------------------------------
N        | Movies               | Category
-----------------------------------------
1        | Save the Last Dance  | Dance
-----------------------------------------
2        | Love and Other Drugs | Love
---------------------------------------
3        | Dance with Me        | Dance
---------------------------------------
4        | Love Actually        | Love
---------------------------------------
5        | High School Musical  | Musical
----------------------------------------

提前致谢!!

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    如果您有 2D 列表,那么只需执行以下操作:

    def add_category(record):
        movie = record[1]
        categories = []
        for category in ['Dance', 'Love', 'Musical']:
            if category in movie:
                categories.append(category)
        return record.append(', '.join(categories))
    
    database = [add_category(record) for record in database]
    

    您可以通过更改add_category() 函数来更改类别列值的计算方式。

    【讨论】:

    • 嗨 Scorpion_God,感谢您的帮助。当我尝试这个时,我得到了这个错误,“str”对象没有属性“_data”。但我已经使用了下面的解决方案,而且效果很好。
    【解决方案2】:

    一种更快的方法是为所有类别创建一个掩码,假设您的数量很少:

    In [22]:
    
    dance_mask = df['Movies'].str.contains('Dance')
    love_mask = df['Movies'].str.contains('Love')
    musical_mask = df['Movies'].str.contains('Musical')
    df[dance_mask]
    Out[22]:
       N               Movies
    0  1  Save the Last Dance
    2  3        Dance with Me
    
    [2 rows x 2 columns]
    
    In [26]:
    # now set category
    df.ix[dance_mask,'Category'] = 'Dance'
    df
    Out[26]:
       N                Movies Category
    0  1   Save the Last Dance    Dance
    1  2  Love and Other Drugs      NaN
    2  3         Dance with Me    Dance
    3  4         Love Actually      NaN
    4  5   High School Musical      NaN
    
    [5 rows x 3 columns]
    
    In [28]:
    # repeat for remaining masks
    df.ix[love_mask,'Category'] = 'Love'
    df.ix[musical_mask,'Category'] = 'Musical'
    df
    Out[28]:
       N                Movies Category
    0  1   Save the Last Dance    Dance
    1  2  Love and Other Drugs     Love
    2  3         Dance with Me    Dance
    3  4         Love Actually     Love
    4  5   High School Musical  Musical
    
    [5 rows x 3 columns]
    

    【讨论】:

    • 非常感谢您抽出宝贵时间回答我的问题。这正是我所需要的。
    • @Ian 没问题,你可以接受这个答案,箭头下面应该有一个勾号。
    猜你喜欢
    • 1970-01-01
    • 2021-03-30
    • 2016-07-06
    • 2022-12-15
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    • 2015-07-04
    相关资源
    最近更新 更多