【问题标题】:Create data frame with multple headings per column and populate data frame in loop创建每列具有多个标题的数据框并循环填充数据框
【发布时间】:2019-03-11 22:52:45
【问题描述】:

我想创建一个每列有多个标题的 Pandas 数据框,并用循环中的数据逐行填充数据框。我以前创建过数据框,但这对于我真正想做的事情来说似乎非常复杂,我不知道从哪里开始。

例子:

step = list(range(1,5))
    for i in step:
        time = -2
        for j in range(0,5): # Time goes from -2 to 2
            one = time*0.5
            two = time*0.4
            score = one + two
            # Code populate dataframe with column time for one and two sub columns, 
            # and the score for the score column
            time += 1
        print("step %s " % i)

数据框的外观图片

【问题讨论】:

    标签: python pandas dataframe indexing


    【解决方案1】:

    您可以在指定indexcolumns 时使用pd.DataFrame 构造函数。重点是使用MultiIndex列:

    idx = pd.Index([f'step {i}' for i in range(1, 5)], name='time')
    cols = pd.MultiIndex.from_tuples([(i, j) for i in range(-2, 3) for j in ('one', 'two')])
    
    df = pd.DataFrame(index=idx, columns=cols)
    

    然后您可以通过pd.DataFrame.at 填充一个值,以便按标签快速设置标量:

    df.at['step 1', (-2, 'two')] = 2
    df.at['step 3', (0, 'one')] = 5
    
    print(df)
    
             -2        -1         0         1         2     
            one  two  one  two  one  two  one  two  one  two
    time                                                    
    step 1  NaN    2  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
    step 2  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
    step 3  NaN  NaN  NaN  NaN    5  NaN  NaN  NaN  NaN  NaN
    step 4  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
    

    【讨论】:

      【解决方案2】:

      虽然 jpp 已经回答了大部分的部分,但我注意到还有另一个 'score;你想要的列。

      arrays= [['score', -2, -2, -1, -1, 0, 0, 1, 1, 2 ,2, 'score'],
              [None, 'one', 'two', 'one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
      
      tuples = list(zip(*arrays))
      columns = pd.MultiIndex.from_tuples(tuples, names = ['time', None ])
      df = pd.DataFrame(index = ['Step 1', 'Step 2', 'Step 3', 'Step 4', 'Step 5'], columns=columns)
      df
      time    score     -2          -1           0           1           2
              NaN      one   two    one   two   one   two   one   two   one   two
      Step 1  NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
      Step 2  NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
      Step 3  NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
      Step 4  NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
      Step 5  NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
      

      感觉有点像黑客

      【讨论】:

        猜你喜欢
        • 2019-10-14
        • 1970-01-01
        • 1970-01-01
        • 2015-08-18
        • 2023-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多