带有随机id变量的Pandas wide_to_long

时间:2018-06-11 22:02:04

标签: python pandas

我在使用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-”之后的任何字符串,而不仅仅是数字?

谢谢!

1 个答案:

答案 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