在Python中将两列一一合并

时间:2019-08-29 02:03:52

标签: python pandas

如果我有这样的数据框:

   id    year quarter
0   1  2017.0      Q1
1   2  2018.0      Q2
2   3  2019.0      Q3
3   4     NaN      Q4

如何通过将yearperiod组合在一起来获得新的数据帧:

    id    year quarter  period
0    1  2017.0      Q1  2017Q1
1    2  2018.0      Q2  2017Q2
2    3  2019.0      Q3  2017Q3
3    4     NaN      Q4  2017Q4
4    5     NaN     NaN  2018Q1
5    6     NaN     NaN  2018Q2
6    7     NaN     NaN  2018Q3
7    8     NaN     NaN  2018Q4
8    9     NaN     NaN  2019Q1
9   10     NaN     NaN  2019Q2
10  11     NaN     NaN  2019Q3
11  12     NaN     NaN  2019Q4

或仅一列:

    period
0   2017Q1
1   2017Q2
2   2017Q3
3   2017Q4
4   2018Q1
5   2018Q2
6   2018Q3
7   2018Q4
8   2019Q1
9   2019Q2
10  2019Q3
11  2019Q4

谢谢!

1 个答案:

答案 0 :(得分:1)

我们可以做pivot + stack

Yourdf=df.pivot_table(*df.columns,dropna=False).stack(dropna=False).reset_index().assign(yourcol=lambda x : x['year'].astype(int).astype(str)+x['quarter'])
yourdf
      year quarter    0 yourcol
0   2017.0      Q1  1.0  2017Q1
1   2017.0      Q2  NaN  2017Q2
2   2017.0      Q3  NaN  2017Q3
3   2017.0      Q4  NaN  2017Q4
4   2018.0      Q1  NaN  2018Q1
5   2018.0      Q2  2.0  2018Q2
6   2018.0      Q3  NaN  2018Q3
7   2018.0      Q4  NaN  2018Q4
8   2019.0      Q1  NaN  2019Q1
9   2019.0      Q2  NaN  2019Q2
10  2019.0      Q3  3.0  2019Q3
11  2019.0      Q4  NaN  2019Q4

更新

pd.MultiIndex.from_product([df.year.dropna().astype(str),df.quarter]).map(''.join)