首页 > 解决方案 > Python - 按日期透视日志数据

问题描述

我有一个这样的数据框:

 Id      Date    Result
 id1     date1   result1
 id1     date2   result2
 .        .        .
 .        .        .
 id2     date11  result11
 id2     date22  result22
 .        .        .
 .        .        .

我想将此数据框转换为此数据框:

 Id        Vector
 id1      [date1: result1, date2: result2, ... ]
 id2      [date11: result11, date22: result22, ... ]

你能帮我解决这个问题吗?

谢谢,

问候。

标签: pythonpandaspivot-table

解决方案


注意...您所需的输出看起来既像列表又像 dict ( [date11: result11, date22: result22, ... ] )。不确定你真正想要的是哪个。我做了两种方式......输出一个字典和一个元组列表。您应该能够从那里修改为您要查找的任何内容。

全过程,输出为字典...

import numpy as np
import pandas as pd

# mimick your sample
arr = [['id1','date1','result1'],
      ['id1','date2','result2'],
      ['id2','date11','result11'],
      ['id2','date22','result22']]
df = pd.DataFrame(arr, columns = ['Id', 'Date', 'Result'])

# helper functions to create 'Vector' column in df2
def raw_func(dt, rslt):
    return dict(zip(dt, rslt))
func = np.vectorize(raw_func, otypes=[object])

# group by and agg into lists
df2 = df.groupby('Id').agg({'Date': list, 'Result': list})
df2
#                  Date                Result
# Id                                         
# id1    [date1, date2]    [result1, result2]
# id2  [date11, date22]  [result11, result22]

# merge Date and Result into dict
df2['Vector'] = func(df2.Date, df2.Result)
df2.reset_index(inplace=True)
df2 = df2.loc[:,['Id', 'Vector']]
df2
#   Id                                        Vector
#  id1      {'date1': 'result1', 'date2': 'result2'}
#  id2  {'date11': 'result11', 'date22': 'result22'}

或者您可以将dictin更改def raw_func()list... 那么您的输出将是一个元组列表。

#   Id                                    Vector
#  id1      [(date1, result1), (date2, result2)]
#  id2  [(date11, result11), (date22, result22)]

推荐阅读