【问题标题】:How to Create Multiple List of Tuple From Pandas Dataframe如何从 Pandas Dataframe 创建多个元组列表
【发布时间】:2020-03-18 10:50:57
【问题描述】:

我有一个包含三列的 Pandas 数据框。我想根据项目列中的值创建一个元组的多个列表

print (df)
   Project  Resource  Time
0       P1         0     4
1       P1         2     4
2       P1         1    10
3       P1         3     3
4       P2         1     3
5       P2         3    10
6       P2         0    11
7       P2         2     3
8       P2         0    12
9       P2         3    11
10      P2         1     3
11      P2         2     3
12      P3         0    12

我想创建的列表元组看起来像这样 [[(0,4),(2,4),(1,10),(3,3)],[(1,3),(3,10),(0,11),(2,3 ),(0,12),(3,11),(1,3),(2,3)],[(0,12)]]

我使用了以下代码

tuples = [tuple(x) for x in data.values]

【问题讨论】:

    标签: python pandas list tuples


    【解决方案1】:

    DataFrame.groupby与lambda函数和zip一起使用,最后将输出Series转换为list

    t  = df.groupby('Project').apply(lambda x: list(zip(x['Resource'], x['Time']))).tolist()
    print (t)
    [[(0, 4), (2, 4), (1, 10), (3, 3)], 
     [(1, 3), (3, 10), (0, 11), (2, 3), (0, 12), (3, 11), (1, 3), (2, 3)],
     [(0, 12)]]
    

    另一种解决方案:

    t  = (df.groupby('Project')['Resource','Time']
            .apply(lambda x: [tuple(y) for y in x.values])
            .tolist())
    

    【讨论】:

      【解决方案2】:

      您可以使用 zip 函数来遍历 pandas 数据框的几列:

      df = pd.DataFrame({"ressource":[0,2, 1,3], "time":[4,4, 10, 3]})
      
      tuples = [(x,y) for x,y in zip(df['ressource'], df['time'])]
      

      输出:

      [(0, 4), (2, 4), (1, 10), (3, 3)]
      

      【讨论】:

        【解决方案3】:

        试试这个:

        >>> df['zip'] = tuple(zip(df.Resource, df.Time))
        >>> df.groupby('Project').agg(lambda x:list(x))['zip'].tolist()
        [[(0, 4), (2, 4), (1, 10), (3, 3)],
         [(1, 3), (3, 10), (0, 11), (2, 3), (0, 12), (3, 11), (1, 3), (2, 3)],
         [(0, 12)]]
        

        【讨论】:

          【解决方案4】:

          这样的事情怎么样:

          listExample=[]
          for code in tmpa.loc[:, 'Project'].unique():
             listExample.append([(a, b) for a, b in tmpa[tmpa.loc[:, 'Project']==code].loc[:, ['Resource', 'Time']].values])
          

          它不漂亮,但我认为它应该可以工作。

          【讨论】:

            猜你喜欢
            • 2015-12-05
            • 2020-10-15
            • 1970-01-01
            • 2019-08-31
            • 2018-04-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-08-31
            相关资源
            最近更新 更多