如何将多个列附加到两个列中?

时间:2018-04-08 12:17:36

标签: python pandas dataframe

我正在处理的数据包含大量列,并带有相关值 - 例如:

| 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.appendpivot_table,但到目前为止无法获得所需的结果..我应该在这里使用哪个pandas函数?

1 个答案:

答案 0 :(得分:2)

melt使用sort_values

df = df.melt('YearQ', var_name='Area', value_name='Value').sort_values(['YearQ','Area'])

使用set_indexstackreset_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