[英]Restructuring a pandas dataframe (convert dates in rows to columns)
I have a pandas dataframe with the following contents我有一个 pandas dataframe,内容如下
Room![]() |
Position ![]() |
Sensor![]() |
Measuring Time![]() |
Value1![]() |
Value2![]() |
Value3![]() |
---|---|---|---|---|---|---|
Living Room![]() |
A1 ![]() |
111 ![]() |
27-12-2021 ![]() |
1.1 ![]() |
1.2 ![]() |
0.9 ![]() |
Living Room![]() |
A2 ![]() |
112 ![]() |
27-12-2021 ![]() |
2.1 ![]() |
2.1 ![]() |
1.9 ![]() |
Living Room![]() |
B1 ![]() |
113 ![]() |
27-12-2021 ![]() |
1.5 ![]() |
1.4 ![]() |
1.4 ![]() |
Living Room![]() |
B2 ![]() |
114 ![]() |
27-12-2021 ![]() |
1.8 ![]() |
1.7 ![]() |
1.9 ![]() |
Bed Room![]() |
A1 ![]() |
211 ![]() |
27-12-2021 ![]() |
4.2 ![]() |
4.5 ![]() |
4.4 ![]() |
Living Room![]() |
A1 ![]() |
111 ![]() |
29-12-2021 ![]() |
0.9 ![]() |
1.1 ![]() |
0.8 ![]() |
Living Room![]() |
A2 ![]() |
112 ![]() |
29-12-2021 ![]() |
1.9 ![]() |
1.8 ![]() |
1.7 ![]() |
Living Room![]() |
B1 ![]() |
115 ![]() |
29-12-2021 ![]() |
1.4 ![]() |
1.3 ![]() |
1.2 ![]() |
Living Room![]() |
B2 ![]() |
114 ![]() |
29-12-2021 ![]() |
1.7 ![]() |
1.5 ![]() |
1.7 ![]() |
I want to convert the dataframe as below我想转换 dataframe 如下
Room![]() |
Position ![]() |
Sensor![]() |
Value![]() |
27-12-2021 ![]() |
29-12-2021 ![]() |
---|---|---|---|---|---|
Living Room![]() |
A1 ![]() |
111 ![]() |
Value1![]() |
1.1 ![]() |
0.9 ![]() |
Living Room![]() |
A1 ![]() |
111 ![]() |
Value2![]() |
1.2 ![]() |
1.1 ![]() |
Living Room![]() |
A1 ![]() |
111 ![]() |
Value3![]() |
0.9 ![]() |
0.8 ![]() |
Living Room![]() |
A2 ![]() |
112 ![]() |
Value1![]() |
2.1 ![]() |
1.9 ![]() |
Living Room![]() |
A2 ![]() |
112 ![]() |
Value2![]() |
2.1 ![]() |
1.8 ![]() |
Living Room![]() |
A2 ![]() |
112 ![]() |
Value3![]() |
1.9 ![]() |
1.7 ![]() |
Living Room![]() |
B1 ![]() |
113 ![]() |
Value1![]() |
1.5 ![]() |
N/A![]() |
Living Room![]() |
B1 ![]() |
113 ![]() |
Value2![]() |
1.4 ![]() |
N/A![]() |
Living Room![]() |
B1 ![]() |
113 ![]() |
Value3![]() |
1.4 ![]() |
N/A![]() |
Living Room![]() |
B1 ![]() |
115 ![]() |
Value1![]() |
N/A![]() |
1.4 ![]() |
Living Room![]() |
B1 ![]() |
115 ![]() |
Value2![]() |
N/A![]() |
1.3 ![]() |
Living Room![]() |
B1 ![]() |
115 ![]() |
Value3![]() |
N/A![]() |
1.2 ![]() |
Living Room![]() |
B2 ![]() |
114 ![]() |
Value1![]() |
1.8 ![]() |
1.7 ![]() |
Living Room![]() |
B2 ![]() |
114 ![]() |
Value2![]() |
1.7 ![]() |
1.5 ![]() |
Living Room![]() |
B2 ![]() |
114 ![]() |
Value3![]() |
1.9 ![]() |
1.7 ![]() |
Bed Room![]() |
A1 ![]() |
211 ![]() |
Value1![]() |
4.2 ![]() |
N/A![]() |
Bed Room![]() |
A1 ![]() |
211 ![]() |
Value2![]() |
4.5 ![]() |
N/A![]() |
Bed Room![]() |
A1 ![]() |
211 ![]() |
Value3![]() |
4.4 ![]() |
N/A![]() |
I tried using pivot but was unsuccessful.我尝试使用 pivot 但不成功。
You can use pivot
:您可以使用
pivot
:
out = df.pivot(index=['Room', 'Position', 'Sensor'],
columns=['Measuring Time'],
values=['Value1', 'Value2', 'Value3']) \
.rename_axis(columns=['Value', None]).stack(level=0).reset_index()
Output: Output:
Room Position Sensor Value 27-12-2021 29-12-2021
0 Living Room A1 111 Value1 1.1 0.9
1 Living Room A1 111 Value2 1.2 1.1
2 Living Room A1 111 Value3 0.9 0.8
3 Living Room A2 112 Value1 2.1 1.9
4 Living Room A2 112 Value2 2.1 1.8
5 Living Room A2 112 Value3 1.9 1.7
6 Living Room B1 113 Value1 1.5 NaN
7 Living Room B1 113 Value2 1.4 NaN
8 Living Room B1 113 Value3 1.4 NaN
9 Living Room B1 115 Value1 NaN 1.4
10 Living Room B1 115 Value2 NaN 1.3
11 Living Room B1 115 Value3 NaN 1.2
12 Living Room B2 114 Value1 1.8 1.7
13 Living Room B2 114 Value2 1.7 1.5
14 Living Room B2 114 Value3 1.9 1.7
Another way with using melt
and pivot
:使用
melt
和pivot
的另一种方法:
df.melt(
id_vars=['Room', 'Position', 'Sensor', 'Measuring Time'])\
.pivot(index=['Room', 'Position', 'Sensor','variable'],columns=['Measuring Time'], values='value').reset_index()
Measuring Time Room Position Sensor variable 27/12/2021 29/12/2021
0 Living Room A1 111 Value1 1.1 0.9
1 Living Room A1 111 Value2 1.2 1.1
2 Living Room A1 111 Value3 0.9 0.8
3 Living Room A2 112 Value1 2.1 1.9
4 Living Room A2 112 Value2 2.1 1.8
5 Living Room A2 112 Value3 1.9 1.7
6 Living Room B1 113 Value1 1.5 NaN
7 Living Room B1 113 Value2 1.4 NaN
8 Living Room B1 113 Value3 1.4 NaN
9 Living Room B1 115 Value1 NaN 1.4
10 Living Room B1 115 Value2 NaN 1.3
11 Living Room B1 115 Value3 NaN 1.2
12 Living Room B2 114 Value1 1.8 1.7
13 Living Room B2 114 Value2 1.7 1.5
14 Living Room B2 114 Value3 1.9 1.7
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.