英文:
DataFrame transformation: from multiple columns to one
问题
使用Pandas和NumPy,您可以将DataFrame从初始表格转换为如下所示的DataFrame:
Name Year Nb
------+--------+--------+-------
0 | A | 2021 | 5.0
1 | A | 2020 | 4.0
2 | A | 2019 | 10.0
3 | A | 2018 | 4.0
4 | A | 2017 | 4.0
...
k | A-Jay | 2021 | 5.0
k+1 | A-Jay | 2020 | 6.0
...
l+i | A.J. | 2019 | 3.0
m | Aaban | 2021 | 4.0
m+1 | Aaban | 2020 | 4.0
...
这种转换需要使用Pandas和NumPy的功能来重新构造DataFrame,包括对名称、年份和数值的变换和组合。如果您需要详细的代码示例,请提供原始DataFrame和所需的转换步骤,我可以为您提供更多的帮助。
英文:
How can I transform with Pandas & NumPy this DataFrame:
to DataFrame like:
Name Year Nb
------+--------+--------+-------
0 | A | 2021 | 5.0
1 | A | 2020 | 4.0
2 | A | 2019 | 10.0
3 | A | 2018 | 4.0
4 | A | 2017 | 4.0
...
k | A-Jay | 2021 | 5.0
k+1 | A-Jay | 2020 | 6.0
...
l+i | A.J. | 2019 | 3.0
m | Aaban | 2021 | 4.0
m+1 | Aaban | 2020 | 4.0
...
?
答案1
得分: 0
这里有一种方式(可能是最优雅的),使用`melt()`:
```python
out = ( df
.melt(id_vars='Name', var_name='Year', value_name='Nb')
.dropna()
.sort_values(['Name','Year'], ascending=[True,False])
.reset_index(drop=True) )
这里是另一种方式,使用stack()
:
out = ( df
.set_index('Name')
.stack()
.reset_index()
.rename(columns={'level_1':'Year', 0:'Nb'})
.sort_values(['Name','Year'],ascending=[True,False])
.reset_index(drop=True) )
样本输入:
Name 2021 2022 2023 2024
0 a NaN 4.0 None 0.0
1 b 2.0 NaN None NaN
2 c 3.0 6.0 None 0.0
输出:
Name Year Nb
0 a 2024 0.0
1 a 2022 4.0
2 b 2021 2.0
3 c 2024 0.0
4 c 2022 6.0
5 c 2021 3.0
英文:
Here's a way (probably the most elegant) using melt()
:
out = ( df
.melt(id_vars='Name', var_name='Year', value_name='Nb')
.dropna()
.sort_values(['Name','Year'], ascending=[True,False])
.reset_index(drop=True) )
Here's another way, this one using stack()
:
out = ( df
.set_index('Name')
.stack()
.reset_index()
.rename(columns={'level_1':'Year',0:'Nb'})
.sort_values(['Name','Year'],ascending=[True,False])
.reset_index(drop=True) )
Sample input:
Name 2021 2022 2023 2024
0 a NaN 4.0 None 0.0
1 b 2.0 NaN None NaN
2 c 3.0 6.0 None 0.0
Output:
Name Year Nb
0 a 2024 0.0
1 a 2022 4.0
2 b 2021 2.0
3 c 2024 0.0
4 c 2022 6.0
5 c 2021 3.0
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论