【问题标题】:Give number after select dataframe选择数据框后给出数字
【发布时间】:2021-03-18 02:39:11
【问题描述】:

你好,我有一张这样的桌子

 Name  Subject Score 
 AA     Math    30
 AA   English   40
 AA     CS      60
 BB     Math    40
 BB   English   55 
 BB     CS      55 
 CC     Math    89
 CC   English   75
 CC     CS      55

选择名称和主题后,我需要将数字提供给过滤表 例如名称:AA BB 和主题:数学英语被选中。使用 pandas 条件表变为

 Name  Subject Score 
 AA     Math    30
 AA   English   40
 BB     Math    40
 BB   English   55 

现在,我需要创建号码列表,以便将 JSON 提供给我的团队需要的 Web 应用程序

[[0,0,50],[0,1,40],[1,0,40],[1,1,50]]

list 中的第一个变量是 name 的 id,第二个是 subject 的 id,第三个是 score。

在其他情况下,当名称:BB CC和主题时:选择英语CS。使用 pandas 条件表变为

 Name  Subject Score 
 BB     English 55
 BB     CS      55
 CC     Math    75
 CC     CS      55

这次我需要再次给出从 0 开始的数字来创建一个新的 JSON 到 Web 应用程序。像这样的表

[[0,0,55],[0,1,55],[1,0,75],[1,1,55]]

我怎样才能做到这一点并让 JSON 始终更新 ID 号??

【问题讨论】:

    标签: python json pandas list dataframe


    【解决方案1】:

    这里有任何简单的方法:

    data = pandas.DataFrame(table) #your table/data
    
    def my_func(Name):
        #use the set data type to remove duplicates
        names_set = set(data['name'])
        id_number = list(names_set).index(Name) #get the index of the specified name
        return id_number
    

    【讨论】:

    • 谢谢。你能告诉我函数 my_func 中的 Name 是什么
    • 这里,'Name' 是根据你的表的人的名字,例如:AA、BB、CC。如果还不明白,请告诉我。 :)
    【解决方案2】:
    import pandas as pd
    
    df = pd.DataFrame({'Name': {0: 'BB', 1: 'BB', 2: 'CC', 3: 'CC'},
     'Subject': {0: 'English', 1: 'CS', 2: 'Math', 3: 'CS'},
     'Score': {0: 55, 1: 55, 2: 75, 3: 55}})
    
    
    df['nid'] = df['Name'].astype('category').cat.codes
    df['sid'] =  df.groupby(['Name']).cumcount()
    
    df[['nid','sid','Score']].values.tolist()
    

    输出

    [[0, 0, 55], [0, 1, 55], [1, 0, 75], [1, 1, 55]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-30
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      • 2011-08-17
      • 1970-01-01
      • 2011-07-18
      • 2020-04-27
      相关资源
      最近更新 更多