如何将一行两列数据帧转换为多行两列数据帧

时间:2019-07-24 02:28:56

标签: python pandas dataframe

我是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方法,但是没有运气。

任何建议将不胜感激。

2 个答案:

答案 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