【问题标题】:String concatenation off dataframe columns as a series index将数据框列的字符串连接作为系列索引
【发布时间】:2021-04-03 23:13:22
【问题描述】:

问题

如何从该数据框的 "Cluster Mean" 列创建 Pandas 系列,但使用来自 monthlyweeklydaily 列的数据作为系列索引。

所需的输出 系列将是这样的,所有列的字符串连接 + df 索引作为索引,“Cluster Mean”列作为值。 :

0_[1.0765, 3, monthly]_[1.0755, 2, weekly]_1  1.0760
1_[1.0592, 6, monthly]_[1.058, 12, weekly]_1  1.0586
2_[1.0461, 3, monthly]_[1.0459, 24, weekly]_1 1.0460

原始数据帧的屏幕截图

数据(最小的、可重复的示例)

{'monthly': {0: [1.0765, '3', 'monthly'],
  1: [1.0592, '6', 'monthly'],
  2: [1.0461, '3', 'monthly']},
 'weekly': {0: [1.0755, '2', 'weekly'],
  1: [1.058, '12', 'weekly'],
  2: [1.0459, '24', 'weekly']},
 'daily': {0: '', 1: '', 2: ''},
 'Cluster Mean': {0: 1.076, 1: 1.0586, 2: 1.046}}

【问题讨论】:

    标签: pandas


    【解决方案1】:
    import pandas as pd
    

    你可以使用apply()方法和join()方法:

    idx=df.index.astype(str)+'_'+df.apply(lambda x:'_'.join((str(x['monthly']),str(x['weekly']),str(x['daily']))),1)
    
    val=df['Cluster Mean']
    

    注意:在上面的代码中,idx 变量存储了您的索引值,而 val 变量存储了该索引的值

    终于使用Series()方法:

    result=pd.Series(index=idx,data=val.values.tolist())
    

    现在,如果您打印 result,您将获得所需的输出(系列):

    #output
    0_[1.0765, '3', 'monthly']_[1.0755, '2', 'weekly']_1     1.0760
    1_[1.0592, '6', 'monthly']_[1.058, '12', 'weekly']_1     1.0586
    2_[1.0461, '3', 'monthly']_[1.0459, '24', 'weekly']_1    1.0460
    

    【讨论】:

      【解决方案2】:

      如果轴为1,您可以使用row.name 直接访问pandas.DataFrame.apply() 中的行索引。

      加入行值后,您可以使用 pandas.concat() 从 Series 创建一个新数据框。

      def join_row(row):
          cols = [row.name] + row[['monthly', 'weekly', 'daily']].values.tolist()
          return '_'.join(map(str, cols))
      
      result = pd.concat([df.apply(join_row, axis=1), df['Cluster Mean']], axis=1)
      
      # print(result)
      
                                                         0  Cluster Mean
      0_[1.0765, '3', 'monthly']_[1.0755, '2', 'weekly']_1     1.0760
      1_[1.0592, '6', 'monthly']_[1.058, '12', 'weekly']_1     1.0586
      2_[1.0461, '3', 'monthly']_[1.0459, '24', 'weekly']_1    1.0460
      

      【讨论】:

        猜你喜欢
        • 2018-08-23
        • 2022-07-27
        • 1970-01-01
        • 2017-03-06
        • 2020-03-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-31
        • 1970-01-01
        相关资源
        最近更新 更多