我正在处理的数据包含大量列,并带有相关值 - 例如:
| YearQ | Area A | Area B | Area C |
+--------+--------+--------+--------+
| 2017Q1 | 1234.0 | 9252.0 | 3421.0 |
| 2017Q2 | 1245.0 | 9368.0 | 3321.0 |
| 2017Q3 | 1350.0 | 9440.0 | 3225.0 |
| 2017Q4 | 1333.0 | 9501.0 | 3625.0 |
为了将此数据与其他数据集相关联,我需要将这些值附加到一列中,同时保留Area
列数据以及YearQ
数据:
| YearQ | Area | Value |
+--------+--------+---------+
| 2017Q1 | Area A | 1234.0 |
| 2017Q1 | Area B | 9252.0 |
| 2017Q1 | Area C | 3421.0 |
| 2017Q2 | Area A | 1245.0 |
| 2017Q2 | Area B | 9368.0 |
| 2017Q2 | Area C | 3321.0 |
我已尝试使用df.append
和pivot_table
,但到目前为止无法获得所需的结果..我应该在这里使用哪个pandas函数?
答案 0 :(得分:2)
df = df.melt('YearQ', var_name='Area', value_name='Value').sort_values(['YearQ','Area'])
使用set_index
,stack
和reset_index
的替代方案有点慢:
df = df.set_index('YearQ').stack().rename_axis(('YearQ','Area')).reset_index(name='Value')
print (df)
YearQ Area Value
0 2017Q1 Area A 1234.0
4 2017Q1 Area B 9252.0
8 2017Q1 Area C 3421.0
1 2017Q2 Area A 1245.0
5 2017Q2 Area B 9368.0
9 2017Q2 Area C 3321.0
2 2017Q3 Area A 1350.0
6 2017Q3 Area B 9440.0
10 2017Q3 Area C 3225.0
3 2017Q4 Area A 1333.0
7 2017Q4 Area B 9501.0
11 2017Q4 Area C 3625.0