Python 如何映射列';将值添加到新列

Python 如何映射列';将值添加到新列,python,python-3.x,pandas,dataframe,csv,Python,Python 3.x,Pandas,Dataframe,Csv,我是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

我是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='communication',数独='games'

如何在非常大的数据集上实现这一点?

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

步骤:

  • 创建一个查找表(或特定的
    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
。只需将任何新的应用程序和类别添加到
查找
字典中,即可完成设置!(将删除此评论)。如果答案有帮助,请单击答案旁边的勾号将其显示为已接受。这是一个标准的练习,谢谢!