python - 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, ... ]
你能帮我解决这个问题吗?
谢谢,
问候。
解决方案
注意...您所需的输出看起来既像列表又像 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'}
或者您可以将dict
in更改def raw_func()
为list
... 那么您的输出将是一个元组列表。
# Id Vector
# id1 [(date1, result1), (date2, result2)]
# id2 [(date11, result11), (date22, result22)]
推荐阅读
- amazon-web-services - 有没有办法清除 dynamoDB 流?
- python - tensorflow迁移学习:如何做批量大小而不是一个一个
- php - php查询ldap记录,包括日期/时间戳字段
- c - 一棵二叉树中有多少个节点只有一个孩子?
- akka-stream - 重用 Source[ByteString, Any] 的任何方式(不将其全部保存在内存中)
- sql - PostgreSQL:从 JSONB 列中删除值
- r - 在 R 中使用 ggplot 为两个不同的组创建折线图
- mysql - 如果匹配模式,则删除字符串的匹配部分
- react-native - 更新到 React Native 0.56.0 后非项目文件中的 Jest SyntaxError
- python-2.7 - 不理解 sess.run 中的 feed_dict