简体   繁体   English

在Python中将两列一一合并

[英]Combine two columns into one one by one in Python

If I have a data frame like this: 如果我有这样的数据框:

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

How can I get a new dataframe by combining year and period together: 如何通过将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

Or just one column: 或仅一列:

    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

Thank you! 谢谢!

We can do pivot + stack 我们可以做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

Update 更新

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM