假设我具有以下DataFrame对象:
import pandas as pd
df = pd.DataFrame({'r1' : [0, 0, 'str1', 'str2', 0 ,0 ,0], 'r2' : ['str1', 'str2', 0, 0, 'str3', 'str4', 'str5']})
df
Out[45]:
r1 r2
0 0 str1
1 0 str2
2 str1 0
3 str2 0
4 0 str3
5 0 str4
6 0 str5
r1
“完成”在哪里r2
(当一个是0
另一个时是a string
),反之亦然。
将两者结合起来并获得以下DataFrame的最快方法是什么:
r_u
0 str1
1 str2
2 str1
3 str2
4 str3
5 str4
6 str5
如果性能很重要,请使用numpy.select
:
#more general solution
df = pd.DataFrame({'r1' : [0, 0, 'str1', 'str2', 0 ,0 ,0, 0, 'str7'],
'r2' : ['str1', 'str2', 0, 0, 'str3', 'str4', 'str5', 0, 'str8']})
print (df)
r1 r2
0 0 str1
1 0 str2
2 str1 0
3 str2 0
4 0 str3
5 0 str4
6 0 str5
7 0 0
8 str7 str8
如果0
在default
参数中定义了两个预期的输出,并且是否都可能在字符串中按掩码和列的顺序对其进行优先排序:
m1 = df['r1'] != 0
m2 = df['r2'] != 0
df['r3'] = np.select([m1, m2], [df['r1'], df['r2']], default=None)
df['r4'] = np.select([m2, m1], [df['r2'], df['r1']], default=None)
print (df)
r1 r2 r3 r4
0 0 str1 str1 str1
1 0 str2 str2 str2
2 str1 0 str1 str1
3 str2 0 str2 str2
4 0 str3 str3 str3
5 0 str4 str4 str4
6 0 str5 str5 str5
7 0 0 None None
8 str7 str8 str7 str8
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句