首先,假设您有以下 Dataframe 。
import pandas as ps
df = ps.DataFrame([
[0, 'test0', 0, 'sub0', 'one'],
[0, 'test0', 1, 'sub1', 'two'],
[1, 'test1', 0, 'sub0', 'one'],
[1, 'test1', 1, 'sub1', 'two'],
], columns=['id', 'name', 'sub_id', 'sub_name', 'value'])
df = df.set_index(['id', 'sub_id'])
name sub_name value
id sub_id
0 0 test0 sub0 one
1 test0 sub1 two
1 0 test1 sub0 one
1 test1 sub1 two
我想将其转换为下面的列表对象(这里我们使用dataclass)。
from typing import List
from dataclasses import dataclass
@dataclass
class SubObj:
id: int
name: str
value: str
@dataclass
class MainObj:
id: int
name: str
sub_obj: List[SubObj]
输出应如下所示:
result = [
MainObj(
id=0,
name='test0',
sub_obj=[
SubObj(
id=0,
name='sub0',
value='one'
),
SubObj(
id=1,
name='sub1',
value='two'
)
]
),
MainObj(
id=1,
name='test1',
sub_obj=[
SubObj(
id=0,
name='sub0',
value='one'
),
SubObj(
id=1,
name='sub1',
value='two'
)
]
),
]
print(result)
[MainObj(id=0, name='test0', sub_obj=[SubObj(id=0, name='sub0', value='one'), SubObj(id=1, name='sub1', value='two')]), MainObj(id=1, name='test1', sub_obj=[SubObj(id=0, name='sub0', value='one'), SubObj(id=1, name='sub1', value='two')])]
我想实现它,以便它输出一个mainobj列表,其中包含尽可能短且易于理解的代码。
你知道怎么做吗?
2条答案
按热度按时间3pvhb19x1#
这里有一个方法可以用Pandas来做
将行聚合到
SubObj
滴sub_id
创建仅包含MainObj
级别信息将行聚合到
MainObj
```ebdffaop2#
像这样的小清单怎么样?
返回
更新
刚刚意识到你想要sub_obj的列表。我认为这是一个更好的方法: