我在使用wide_to_long函数时遇到了一些麻烦。这个例子工作正常:
Loc Nom Meas-1 Meas-2 Meas-3
200 A 0.8 1.1 1.2
201 B 4.9 5.1 5.2
pd.wide_to_long(df, 'Meas', i=['Loc','Nom'], j='Ref', sep='-').reset_index()
Loc Nom Meas Ref
200 A 0.8 1
200 A 1.1 2
200 A 1.2 3
201 B 4.9 1
201 B 5.1 2
201 B 5.2 3
我的问题是我的数据框中“Meas-”后面的字符串是一个随机的字母数字序列号。一个基本的例子:
Loc Nom Meas-1 Meas-2D Meas-3
200 A 0.8 1.1 1.2
201 B 4.9 5.1 5.2
pd.wide_to_long(df, 'Meas', i=['Loc','Nom'], j='Ref', sep='-').reset_index()
Loc Nom Meas Meas-2D Ref
200 A 0.8 1.1 1
200 A 1.2 1.1 3
201 B 4.9 5.1 1
201 B 5.2 5.1 3
更糟糕的是,如果所有“Meas-”部分后跟包含字母的字符串,我会得到一个空的数据帧错误:
Loc Nom Meas-1D Meas-2D Meas-3D
200 A 0.8 1.1 1.2
201 B 4.9 5.1 5.2
pd.wide_to_long(df, 'Meas', i=['Loc','Nom'], j='Ref', sep='-').reset_index()
Empty DataFrame
如何让这个函数使用Ref的“Meas-”之后的任何字符串,而不仅仅是数字?
谢谢!
答案 0 :(得分:2)
你应该查看suffix
参数。(如果你没有提到它,它会默认寻找数字'\d+'
,因为'2D'不是数字,然后什么都不返回)
pd.wide_to_long(df, 'Meas', i=['Loc','Nom'], j='Ref', sep='-',suffix='\w+').reset_index()
Out[289]:
Loc Nom Ref Meas
0 200 A 1 0.8
1 200 A 2D 1.1
2 200 A 3 1.2
3 201 B 1 4.9
4 201 B 2D 5.1
5 201 B 3 5.2