【问题标题】:How to map a column's value to a new column如何将列的值映射到新列
【发布时间】:2021-03-09 23:04:31
【问题描述】:

我是 python 新手,数据集如下:

package_name,name,starttime,duration   
com.instagram.android,Instagram,2020-10-19 21:18:57.527,0.116
com.instagram.android,Instagram,2020-10-19 21:26:42.613,3.945
com.facebook.katana,Facebook,2020-10-19 21:26:45.050,1.277
,sudoku,2020-10-30 20:20:45.050,25.277  

我正在尝试添加包含应用程序类别的列。例如:Facebook 和 Instagram = '交流',数独 = '游戏',...

如何在非常大的数据集上完成此操作?

【问题讨论】:

    标签: python python-3.x pandas dataframe csv


    【解决方案1】:

    本质上,您希望将列的值映射到查找表。为此,pandas.Series.map() 函数非常有用。

    The official docs can be found here.

    步骤:

    • 创建一个查找表(具体来说是dict
    • 将您的数据读入pandas.DataFrame
    • 在要映射的键列上调用map函数
    • 将输出分配给新列

    示例代码:

    import pandas as pd
    
    # Create a lookup table (dict).
    lookup = {'instagram': 'communication',
              'facebook': 'communication',
              'sudoku': 'games'}
    
    # Use DataFrame in OP's question.
    df = pd.read_clipboard(sep=',')
    # Alternatively, the dataset can be read data from a CSV file.
    # df = pd.read_csv('/path/to/file.csv', sep=',')
      
    # Map the values from `name` column (lower cased) to the category.
    df['category'] = df['name'].str.lower().map(lookup)
    

    输出:

                package_name       name                starttime  duration     \
    0  com.instagram.android  Instagram  2020-10-19 21:18:57.527        0.116   
    1  com.instagram.android  Instagram  2020-10-19 21:26:42.613        3.945   
    2    com.facebook.katana   Facebook  2020-10-19 21:26:45.050        1.277   
    3                    NaN     sudoku  2020-10-30 20:20:45.050       25.277   
    
            category  
    0  communication  
    1  communication  
    2  communication  
    3          games  
    

    【讨论】:

    • 感谢您的回复。如何找到不同类别的应用程序?
    • 很荣幸,希望对您有所帮助。由于应用程序类别逻辑是“任意的” - 这将是用户(您)定义的dict。只需将任何新的应用程序和类别添加到 lookup 字典即可!
    • (将删除此评论)。如果答案对您有帮助,请单击答案旁边的勾号,将其显示为已接受。这是标准的 SO 做法,谢谢!
    猜你喜欢
    • 2018-05-16
    • 2021-09-21
    • 2021-01-30
    • 2016-06-04
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多