Python:转置列和重复行
Python: Transpose columns & duplicate rows
我是 Python 的新手,我正在尝试解决以下问题...
我读到 excel 文件 pandas 看起来像这样:
国家
2000
2001
2002
2003
2004
...
阿根廷
1.23
4.56
7.89
10.11
12.13
...
巴西
14.15
16.17
18.19
20.21
22.23
...
智利
...
...
...
...
...
...
哥伦比亚
...
...
...
...
...
...
而我试图得到的是这样的:
国家
年
价值
阿根廷
2000
1.23
阿根廷
2001
4.56
阿根廷
2002
7.89
阿根廷
2003
10.11
阿根廷
2004
12.13
...
...
...
巴西
2000
14.15
巴西
2001
16.17
巴西
2002
18.19
巴西
2003
20.21
巴西
2004
22.23
...
...
...
智利
2000
...
...
...
...
我已经阅读了一些关于移调的帖子,但没有找到任何可以解决我的问题的帖子。
有人可以帮忙吗?
pandas.melt 对您取消透视数据框很有用。
https://pandas.pydata.org/docs/reference/api/pandas.melt.html
因此,您可以按如下方式将数据框转换为您想要的内容:
代码
>>> import pandas as pd
>>> pd.__version__
'1.2.4'
>>> df = pd.DataFrame({
... "Country": ["Argentina", "Brazil",],
... "2000": [1.23, 14.15,],
... "2001": [4.56, 16.17,],
... "2002": [7.89, 18.19,],
... "2003": [10.11, 20.21,],
... "2004": [12.13, 22.23,],
... }) # Create sample data
>>> df
Country 2000 2001 2002 2003 2004
0 Argentina 1.23 4.56 7.89 10.11 12.13
1 Brazil 14.15 16.17 18.19 20.21 22.23
>>> df.melt(id_vars="Country", var_name="Year", value_name="Value")
Country Year Value
0 Argentina 2000 1.23
1 Brazil 2000 14.15
2 Argentina 2001 4.56
3 Brazil 2001 16.17
4 Argentina 2002 7.89
5 Brazil 2002 18.19
6 Argentina 2003 10.11
7 Brazil 2003 20.21
8 Argentina 2004 12.13
9 Brazil 2004 22.23
>>> # If you want to sort the records by "Country":
>>> df.melt(id_vars="Country", var_name="Year", value_name="Value").sort_values("Country").reset_index(drop=True)
Country Year Value
0 Argentina 2000 1.23
1 Argentina 2001 4.56
2 Argentina 2002 7.89
3 Argentina 2003 10.11
4 Argentina 2004 12.13
5 Brazil 2000 14.15
6 Brazil 2001 16.17
7 Brazil 2002 18.19
8 Brazil 2003 20.21
9 Brazil 2004 22.23
谢谢:)
我是 Python 的新手,我正在尝试解决以下问题...
我读到 excel 文件 pandas 看起来像这样:
国家 | 2000 | 2001 | 2002 | 2003 | 2004 | ... |
---|---|---|---|---|---|---|
阿根廷 | 1.23 | 4.56 | 7.89 | 10.11 | 12.13 | ... |
巴西 | 14.15 | 16.17 | 18.19 | 20.21 | 22.23 | ... |
智利 | ... | ... | ... | ... | ... | ... |
哥伦比亚 | ... | ... | ... | ... | ... | ... |
而我试图得到的是这样的:
国家 | 年 | 价值 |
---|---|---|
阿根廷 | 2000 | 1.23 |
阿根廷 | 2001 | 4.56 |
阿根廷 | 2002 | 7.89 |
阿根廷 | 2003 | 10.11 |
阿根廷 | 2004 | 12.13 |
... | ... | ... |
巴西 | 2000 | 14.15 |
巴西 | 2001 | 16.17 |
巴西 | 2002 | 18.19 |
巴西 | 2003 | 20.21 |
巴西 | 2004 | 22.23 |
... | ... | ... |
智利 | 2000 | ... |
... | ... | ... |
我已经阅读了一些关于移调的帖子,但没有找到任何可以解决我的问题的帖子。
有人可以帮忙吗?
pandas.melt 对您取消透视数据框很有用。
https://pandas.pydata.org/docs/reference/api/pandas.melt.html
因此,您可以按如下方式将数据框转换为您想要的内容:
代码
>>> import pandas as pd
>>> pd.__version__
'1.2.4'
>>> df = pd.DataFrame({
... "Country": ["Argentina", "Brazil",],
... "2000": [1.23, 14.15,],
... "2001": [4.56, 16.17,],
... "2002": [7.89, 18.19,],
... "2003": [10.11, 20.21,],
... "2004": [12.13, 22.23,],
... }) # Create sample data
>>> df
Country 2000 2001 2002 2003 2004
0 Argentina 1.23 4.56 7.89 10.11 12.13
1 Brazil 14.15 16.17 18.19 20.21 22.23
>>> df.melt(id_vars="Country", var_name="Year", value_name="Value")
Country Year Value
0 Argentina 2000 1.23
1 Brazil 2000 14.15
2 Argentina 2001 4.56
3 Brazil 2001 16.17
4 Argentina 2002 7.89
5 Brazil 2002 18.19
6 Argentina 2003 10.11
7 Brazil 2003 20.21
8 Argentina 2004 12.13
9 Brazil 2004 22.23
>>> # If you want to sort the records by "Country":
>>> df.melt(id_vars="Country", var_name="Year", value_name="Value").sort_values("Country").reset_index(drop=True)
Country Year Value
0 Argentina 2000 1.23
1 Argentina 2001 4.56
2 Argentina 2002 7.89
3 Argentina 2003 10.11
4 Argentina 2004 12.13
5 Brazil 2000 14.15
6 Brazil 2001 16.17
7 Brazil 2002 18.19
8 Brazil 2003 20.21
9 Brazil 2004 22.23
谢谢:)