我在Python中使用Pandas操作数据框以匹配特定格式。
我目前有一个数据框,每个测量位置(A或B)都有一行。每行都有一个名义目标和多个测量数据点。
这是我目前的格式:
df=
Location Nominal Meas1 Meas2 Meas3
A 4.0 3.8 4.1 4.3
B 9.0 8.7 8.9 9.1
我需要操作此数据,因此每行只有一个测量数据点,并将源行中的位置和标称值复制到新行。测量数据也需要放在第一列。
这是我需要的格式:
df =
Meas Location Nominal
3.8 A 4.0
4.1 A 4.0
4.3 A 4.0
8.7 B 9.0
8.9 B 9.0
9.1 B 9.0
我尝试过concat并使用和不使用transpose()附加函数但没有成功。
这是我能找到的最相似的例子,但它并没有让我在那里:
for index, row in df.iterrows():
pd.concat([row]*3, ignore_index=True)
谢谢!
答案 0 :(得分:2)
它是一个广泛而长期的问题
pd.wide_to_long(df,'Meas',i=['Location','Nominal'],j='drop').reset_index().drop('drop',1)
Out[637]:
Location Nominal Meas
0 A 4.0 3.8
1 A 4.0 4.1
2 A 4.0 4.3
3 B 9.0 8.7
4 B 9.0 8.9
5 B 9.0 9.1
答案 1 :(得分:0)
另一种解决方案,使用melt
:
new_df = (df.melt(['Location','Nominal'],
['Meas1', 'Meas2', 'Meas3'],
value_name = 'Meas')
.drop('variable', axis=1)
.sort_values('Location'))
>>> new_df
Location Nominal Meas
0 A 4.0 3.8
2 A 4.0 4.1
4 A 4.0 4.3
1 B 9.0 8.7
3 B 9.0 8.9
5 B 9.0 9.1