【问题标题】:Display Pandas DataFrame in csv format以 csv 格式显示 Pandas DataFrame
【发布时间】:2016-09-22 17:32:39
【问题描述】:

我有一个熊猫数据框q2,看起来像这样:

    StudentID     Subjects
6         323      History
9         323      Physics
8         999    Chemistry
7         999      History
4         999      Physics
0        1234    Chemistry
5        2834      Physics
1        3455    Chemistry
2        3455      History
10       3455  Mathematics
3       56767  Mathematics

我想知道哪个学生上过哪些课程并显示在屏幕上。

gb = q2.groupby(('StudentID'))
result = gb['Subjects'].unique()

c1=pd.DataFrame({'StudentID':result.index, 'Subjects':result.values})

c1 看起来像这样

   StudentID                           Subjects
0        323                 [History, Physics]
1        999      [Chemistry, History, Physics]
2       1234                        [Chemistry]
3       2834                          [Physics]
4       3455  [Chemistry, History, Mathematics]
5      56767                      [Mathematics]

但是,所需的输出如下:

323: History, Physics
999: Chemistry, History, Physics
1234: Chemistry
2834: Physics
3455: Chemistry, History, Mathematics
56767: Mathematics

我能做什么?

【问题讨论】:

    标签: python list pandas dataframe unique


    【解决方案1】:

    我认为你可以 apply 函数 join。也可以使用reset_index 创建DataFrame

    gb = q2.groupby(('StudentID'))
    result = gb['Subjects'].unique()
    
    c1 = result.reset_index()
    
    c1.Subjects = c1.Subjects.apply(', '.join)
    print (c1)
       StudentID                         Subjects
    0        323                 History, Physics
    1        999      Chemistry, History, Physics
    2       1234                        Chemistry
    3       2834                          Physics
    4       3455  Chemistry, History, Mathematics
    5      56767                      Mathematics
    

    最后你可以将列StudentID 转换为str(如果dtypeint)并连接在一起:

    c1['new'] = c1.StudentID.astype(str) + ':' + c1.Subjects
    print (c1)
       StudentID                         Subjects  \
    0        323                 History, Physics   
    1        999      Chemistry, History, Physics   
    2       1234                        Chemistry   
    3       2834                          Physics   
    4       3455  Chemistry, History, Mathematics   
    5      56767                      Mathematics   
    
                                        new  
    0                  323:History, Physics  
    1       999:Chemistry, History, Physics  
    2                        1234:Chemistry  
    3                          2834:Physics  
    4  3455:Chemistry, History, Mathematics  
    5                     56767:Mathematics  
    

    如果可以覆盖原始数据,请使用:

    result = result.index.to_series().astype(str) + ':' + result.apply(', '.join)
    print (result)
    StudentID
    323                      323:History, Physics
    999           999:Chemistry, History, Physics
    1234                           1234:Chemistry
    2834                             2834:Physics
    3455     3455:Chemistry, History, Mathematics
    56767                       56767:Mathematics
    dtype: object
    

    【讨论】:

    • 谢谢,但它仍然不像所需的输出,请看上面!
    • @GKS - 谢谢,对不起,我错过了。现在是对的吗?
    • 完美!谢谢:-)
    猜你喜欢
    • 2018-09-28
    • 2018-08-07
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 2015-05-20
    • 1970-01-01
    相关资源
    最近更新 更多