如何根据列ID重新构造数据集
id time A B C D
A 11111 [] [] [] None
A 22222 [aaaa] None [] []
A 33333 [] [] [ccccc] sasasasasa
A 44444 None None [] ddfdfdf
A 55555 [] [] [] []
A 66666 [] [aaaa] [] None
A 77777 [a1a1a1] [] None []
A 88888 None [] [] None
A 99999 [] [] None ssdskd
A 100000 [] [] [] sdsdsd
A 101111 None [a1a1a1] [] []
B 120000 [xxxx] [] None []
B 333333 [] None [] []
B 130000 None None []
B 443430 [] [] [zzzz] []
B 543434 none [xxxx] None None
根据时间列,我们可以按如下方式重新排列数据集
ID data A data B A B c D
A 22222 44444 aaaa aaaa ccccc sasasasasa,ddfdfdf
A 55555 77777 a1a1a1 a1a1a1 nan ssdskd , sdsdsd
B 120000 130000 xxxx xxxx zzzz nan
这里data A
列是column A
出现的时间,data B
列是column B
出现的时间Column C
将始终出现在A
和B
之间
代码:
df1 = (df.set_index('id')
.applymap(lambda x: np.nan if x == [] else x)
.stack()
.unstack()
.apply(lambda x: x.str[0])
)
第一部分解决方案类似-由两列创建} 重塑,通过索引将元素列表删除为标量,并将
MultiIndex
,将空列表替换为缺少的值,由^{MultiIndex
的时间级别转换为列:然后通过^{} 重塑,只需要通过^{} 新级别的重复数据消除
MultiIndex
,然后通过join
展平列,以避免MultiIndex in columns
:编辑:首先使用聚合修改解决方案,如果连续值重复,则在列
D
中使用join
进行修改,但数据中似乎存在错误,因为从time
列创建的data
列不匹配:相关问题 更多 >
编程相关推荐