为了账号安全,请及时绑定邮箱和手机立即绑定

为 pandas 数据框的每个 id 替换列中序列的缺失值

为 pandas 数据框的每个 id 替换列中序列的缺失值

FFIVE 2021-05-31 05:02:07
我有一个数据集:dt = {'id': [120,120,120,120,120,121,121,345], 'day': [0, 1,2,3,4,0,2,0], 'value': [[0.3,-0.5,-0.7],[0.5,3.4,2.7],[0.45,3.4,0.7],[0.25,0.4,0.7],[0.15,0.34,0.17],[0.35,3.4,2.7],[0.5,3.44,2.57],[0.5,0.34,0.37]]}df = pd.DataFrame(data=dt)    day id  value0   0   120 [0.3, -0.5, -0.7]1   1   120 [0.5, 3.4, 2.7]2   2   120 [0.45, 3.4, 0.7]3   3   120 [0.25, 0.4, 0.7]4   4   120 [0.15, 0.34, 0.17]5   0   121 [0.35, 3.4, 2.7]6   2   121 [0.5, 3.44, 2.57]7   0   345 [0.5, 0.34, 0.37]对于每个ID,应该有一个从0到5的天序列。在我的列ID数据集中,缺少了几天。我想为这些ID添加缺少的天数,并为相应的“值”列添加零数组。结果:   day  id  value0   0   120 [0.3, -0.5, -0.7]1   1   120 [0.5, 3.4, 2.7]2   2   120 [0.45, 3.4, 0.7]3   3   120 [0.25, 0.4, 0.7]4   4   120 [0.15, 0.34, 0.17]5   0   121 [0.35, 3.4, 2.7]6   1   121 [0, 0, 0]7   2   121 [0.5, 3.44, 2.57]8   3   121 [0, 0, 0]9   4   121 [0, 0, 0]10  0   345 [0.5, 0.34, 0.37]11  1   345 [0, 0, 0]12  2   345 [0, 0, 0]13  3   345 [0, 0, 0]14  4   345 [0, 0, 0]这是样本空间。我将在一个巨大的数据集上做这个。我的尝试:    r1=0for i in df.id.unique():    val=df.loc[df['id'] == i]    mx=val.loc[val['day'].idxmax()].day    for index,row in val.iterrows():        if row.day!=r1:            for k in range(int(row.day)-r1-1):                a.append(np.asarray([0]*3))            r1=row.day        else:            a.append(row.value)        if(row.day==mx):            a.append(row.value)            for j in range(4-mx):                a.append(np.asarray([0]*3)))    r1=r1+1但是这段代码不起作用。我该怎么做呢?
查看完整描述

3 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

我假设每天(0到4)在数据框中的某个位置至少被提及一次。

使id和day为MultiIndex(set_index),然后将数据帧转换为表(unstack)。会有缺失值(某些 id 的缺失天数),将它们设置为零 ( fillna)。然后将表转换回向量(stack),并将索引转换回列(reset_index)。

df1 = df.set_index(['id', 'day']).unstack().fillna(0)\
        .stack().reset_index().astype(object)

数据框必须转换为 type object,否则将列表分配给列将不起作用。现在,将0替换为您选择的列表:

df1.loc[df1['value'] == 0, 'value'] = [[0, 0, 0]]

请注意,您应该分配一个包含所需列表的单元素列表。


查看完整回答
反对 回复 2021-06-01
  • 3 回答
  • 0 关注
  • 148 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信