Python:根据分组的数据框创建子列表

时间:2018-08-15 13:39:15

标签: python list dictionary dataframe pandas-groupby

我有一个具有以下格式的数据框:

    Timestamp       X      Y       Name   PlayerID
        0           0      0.5    Albert     1
       100          0      0.3    Albert     1 
       200          0      0.5    Albert     1
       300          0      0.6    Albert     1
        0          -22     4.8    Gregoire   2
       100         -32      5     Gregoire   2
       200         -11     3.4    Gregoire   2
       300         -23     4.4    Gregoire   2

我需要的是一本字典,其键为唯一时间戳记值,并且字典的值必须是包含属于该时间戳记的项的列表的列表。这意味着:

        {'0': [ ['0','0.5','Albert','1'], ['-22','4.8','Gregoire','2'] ]
        '100': [ ['0','0.3','Albert','1'], ['-32','5','Gregoire','2'] ]
        '200': [ ['0','0.5','Albert','1'], ['-11','3.4','Gregoire','2'] ]
        '300': [ ['0','0.6','Albert','1'], ['-23','4.4','Gregoire','2'] ] }

我将以下代码放在一起,但它只给我一个字典,其中包含时间戳记作为键,并且值是属于该时间戳记的所有项的列表:

df.set_index('Timestamp').stack().groupby('Timestamp').apply(list).to_dict()

输出:

        {'0':  ['0','0.5','Albert','1','-22','4.8','Gregoire','2']
        '100': ['0','0.3','Albert','1','-32','5','Gregoire','2'] 
        '200': ['0','0.5','Albert','1','-11','3.4','Gregoire','2'] 
        '300': ['0','0.6','Albert','1','-23','4.4','Gregoire','2'] }

有没有办法做到这一点?我猜想可以在该行代码上进行某些更改以创建子列表而不是一个列表,但是我还没有弄清楚该怎么做。感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

这可以吗?

df['Result'] = df.set_index('Timestamp').values.tolist()
df = df.groupby('Timestamp')['Result'].apply(list)

df.to_dict()

{0: [[0L, 0.5, 'Albert', 1L], [-22L, 4.8, 'Gregoire', 2L]],
 200: [[0L, 0.5, 'Albert', 1L], [-11L, 3.4, 'Gregoire', 2L]],
 100: [[0L, 0.3, 'Albert', 1L], [-32L, 5.0, 'Gregoire', 2L]],
 300: [[0L, 0.6, 'Albert', 1L], [-23L, 4.4, 'Gregoire', 2L]]}