问题描述
这只是我试图用 Pandas 实现的一个非常具体的数据结构转换,所以如果你知道怎么做,请分享:)
id | 价值 | 日期 |
---|---|---|
1 | 1 | 2021-04-01 |
1 | 5 | 2021-04-02 |
1 | 10 | 2021-04-03 |
2 | 3 | 2021-04-01 |
2 | 4 | 2021-04-02 |
2 | 11 | 2021-04-03 |
现在我想把它转换成一个对象,其中键是 id,值是关于该 id 的信息数组。所以它看起来像这样......
{
'1': [
{ 'value': 1,'date': '2021-04-01' },{ 'value': 5,'date': '2021-04-02' },{ 'value': 10,'date': '2021-04-03' }
],'2': [
{ 'value': 3,{ 'value': 4,{ 'value': 11,}
我想我必须以某种方式使用 .to_dict()
,但我不知道该怎么做?
想法?
编辑:我已经想出了一种蛮力的方法,我正在寻找更优雅的东西;)
解决方法
您可以在将数据框转换为 dict 对象后使用列表理解。
但这里有一种更熊猫的方式,如果您的 id
列是数据框的真实列,
df = df.set_index('id').T.to_dict()
如果您的意思是 id
作为数据帧的索引,请使用,
df = df.T.to_dict()
,
您可以在 groupby()
上使用 id
,然后在每个组上使用 apply()
to_dict()
:
df.groupby('id').apply(lambda x: x[['value','date']].to_dict(orient='records')).to_dict()
{1: [{'value': 1,'date': '2021-04-01'},{'value': 5,'date': '2021-04-02'},{'value': 10,'date': '2021-04-03'}],2: [{'value': 3,{'value': 4,{'value': 11,'date': '2021-04-03'}]}