我是Python的新手。
我有一个包含两列的数据框。一个是ID列,另一个是 与ID相关的年份和计数信息。
我想将此格式转换为具有相同ID的多行。
当前数据框如下:
ID information
1 2014:Total:0, 2015:Total:1, 2016:Total:2
2 2017:Total:3, 2018:Total:1, 2019:Total:2
我希望转换后的数据框应如下所示:
ID Year Value
1 2014 0
1 2015 1
1 2016 2
2 2017 3
2 2018 1
2 2019 2
我尝试使用pandas数据框的str.split方法,但是没有运气。
任何建议将不胜感激。
答案 0 :(得分:1)
让我们使用explode
:-)(pandas 0.25.0中的新功能)
df.information=df.information.str.split(', ')
Yourdf=df[['ID']].join(df.information.explode().str.split(':',expand=True).drop(1,axis=1))
Yourdf
ID 0 2
0 1 2014 0
0 1 2015 1
0 1 2016 2
1 2 2017 3
1 2 2018 1
1 2 2019 2
答案 1 :(得分:0)
尝试使用以下代码,这与@WenYoBen的答案不同,它也适用于更低的版本:
df2 = pd.DataFrame(df['information'].str.split(', ', expand=True).apply(lambda x: x.str.split(':')).T.values.flatten().tolist(), columns=['Year', '', 'Value']).iloc[:, [0, 2]]
print(pd.DataFrame(sorted(df['ID'].tolist() * (len(df2) // 2)), columns=['ID']).join(df2))
输出:
ID Year Value
0 1 2014 0
1 1 2017 3
2 1 2015 1
3 2 2018 1
4 2 2016 2
5 2 2019 2