Python透视日志数据(按日期)

2024-04-19 00:58:45 发布

您现在位置: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, ... ]

你能帮我解决这个问题吗

谢谢你

敬礼


Tags: 数据iddateresultvectorid2id1date1
1条回答
网友
1楼 · 发布于 2024-04-19 00:58:45

一个音符。。。所需的输出看起来既像列表又像dict([date11: result11, date22: result22, ... ])。不知道你到底想要哪一个。我有两种方法。。。输出dict和元组列表。你应该能够从那里修改到你想要的任何东西

全过程,输出为dict

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'}

或者您可以将def raw_func()中的dict更改为list。。。然后输出一个元组列表

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

相关问题 更多 >