[英]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: 如何通过将
year
和period
组合在一起来获得新的数据框:
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.