[英]Converting dictionary to dataframe, and then melting / stacking columns to rows
I am a bit confused about how to use melt
or stack
correctly in order to transform my dataframe.我对如何正确使用melt
或stack
来转换我的 dataframe 有点困惑。
Currently have a dataframe which looks as follows:目前有一个 dataframe 如下所示:
My objective is to transform this data frame, (probably using melt
or stack
), and I'm having some trouble doing so.我的目标是转换这个数据框(可能使用melt
或stack
),但我在这样做时遇到了一些麻烦。 My objective is to have my dataframe look like this:我的目标是让我的 dataframe 看起来像这样:
My data is currently stored in a dict
:我的数据当前存储在dict
中:
{'K_T1': [84.51865079365093,
84.51865079365093,
83.80912698412698,
83.80912698412698,
86.56468253968255,
86.56468253968255],
'K_T2': [77.26309523809515,
77.26309523809515,
77.57777777777771,
77.57777777777771,
77.09999999999992,
77.09999999999992],
'Z_T1': [83.80912698412698,
83.80912698412698,
86.61111111111107,
86.61111111111107,
87.81746031746032,
87.81746031746032],
'Z_T2': [77.57777777777771,
77.57777777777771,
75.8619047619048,
75.8619047619048,
74.79007936507927,
74.79007936507927]}
Pseudocode:伪代码:
dict
to a dataframe: K_Z_Averages_df = pd.DataFrame.from_dict(K_Z_Averages)
将我的dict
转换为 dataframe: K_Z_Averages_df = pd.DataFrame.from_dict(K_Z_Averages)
Part Name
.为Part Name
添加一列。T1
or T2
using melt
or stack
.确定初始列名称是否列出了 T1 或 T2,并使用melt
或stack
将其放入正确的列T1
或T2
中。Thanks for any support which can be offered!感谢您提供的任何支持!
Use str.split
first by _
in columns, then reshape by DataFrame.stack
with some data cleaning:首先使用str.split
by _
in columns,然后通过DataFrame.stack
进行一些数据清理来重塑:
df.columns = df.columns.str.split('_', expand=True)
df = (df.stack(0)
.sort_index(level=1)
.rename_axis([None, 'Part Name'])
.reset_index(level=1)
.reset_index(drop=True))
print (df)
Part Name T1 T2
0 K 84.518651 77.263095
1 K 84.518651 77.263095
2 K 83.809127 77.577778
3 K 83.809127 77.577778
4 K 86.564683 77.100000
5 K 86.564683 77.100000
6 Z 83.809127 77.577778
7 Z 83.809127 77.577778
8 Z 86.611111 75.861905
9 Z 86.611111 75.861905
10 Z 87.817460 74.790079
11 Z 87.817460 74.790079
Another idea with wide_to_long
and rename columns with change order before and after _
: wide_to_long
的另一个想法,并在_
之前和之后使用更改顺序重命名列:
df.columns = [f'{b}_{a}' for a, b in df.columns.str.split('_')]
df = (pd.wide_to_long(df.reset_index(),
stubnames=['T1','T2'],
i='index',
j='Part Name',
sep='_',
suffix='\w+')
.reset_index(level=1).reset_index(drop=True))
print (df)
Part Name T1 T2
0 K 84.518651 77.263095
1 K 84.518651 77.263095
2 K 83.809127 77.577778
3 K 83.809127 77.577778
4 K 86.564683 77.100000
5 K 86.564683 77.100000
6 Z 83.809127 77.577778
7 Z 83.809127 77.577778
8 Z 86.611111 75.861905
9 Z 86.611111 75.861905
10 Z 87.817460 74.790079
11 Z 87.817460 74.790079
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.