如何将Pandas Dataframe 中的行提取到一个与给定时间对应的字典中?

qfe3c7zg  于 2022-12-09  发布在  其他
关注(0)|答案(3)|浏览(104)

我有一个 Dataframe df,它包含以下列:一个月一个月一个月,一个月二个月,一个月三个月。
每个id都有多行,每行都按照time的升序排序。时间是intid也是intvalfloat
例如,可以是,

id   time  val
0    1     2.3
0    2     3.0
0    5     8.0
1    1     5.1
1    2     7.8
.......

给定一个时间t,我需要返回一个dict,它在给定的t上存储id: val对。
例如,t = 2,返回{0: 3.0; 1: 7.8}
我想知道是否有一个内置的方式来做这与Pandas数据框?

jchrr9hc

jchrr9hc1#

可能的解决方案:

dict(df.loc[df.time.eq(2), ['id', 'val']].to_records(index=False))

另一种可能的解决方案:

aux = df.loc[df.time.eq(2), ['id', 'val']]
dict(zip(aux.id, aux.val))

输出量:

{0: 3.0, 1: 7.8}
t1qtbnec

t1qtbnec2#

您可以使用字典组件

mapping = {k: v.groupby("id")["val"].apply(list).to_dict() for k, v in df.reset_index("time").groupby("time")}
print(mapping.get(2))

输出量:

{0: [3.0], 1: [7.8]}
lbsnaicq

lbsnaicq3#

您可以:

t = 2
df.loc[df.time.eq(t)].set_index('id')['val'].to_dict()

输出:

{0: 3.0, 1: 7.8}

如果您有多个索引,即您的idtime都是索引。
如果你的索引顺序是['id', 'time'],那么你可以:

t = 2
df.loc[(slice(None), t), :].reset_index('time')['val'].to_dict()

如果索引顺序为['time', 'id'],则:

t = 2
df.loc[(t, slice(None)), :].reset_index('time')['val'].to_dict()

相关问题