her*_*lla 5 python string dataframe pandas
给定一个数据帧df
,(现实生活是+1000行df).元素ColB
是列表列表.
ColA ColB
0 'A' [['a','b','c'],['d','e','f']]
1 'B' [['f','g','h'],['i','j','k']]
2 'A' [['l','m','n'],['o','p','q']]
Run Code Online (Sandbox Code Playgroud)
如何ColC
使用不同列中的元素有效地创建一个字符串,如下所示:
ColC
'A>+a b:c,+d e:f'
'B>+f g:h,+i j:k'
'A>+l m:n,+o p:q'
Run Code Online (Sandbox Code Playgroud)
我尝试了df.apply
这些方法,灵感来自于:
df['ColC'] = df.apply(lambda x:'%s>' % (x['ColA']),axis=1)
Run Code Online (Sandbox Code Playgroud)
这适用于字符串的前2个元素.其余的都很难过.
像这样的东西吗?
df['ColC'] = df.ColA + '>+' + df.ColB.str[0].str[0] + \
' ' + df.ColB.str[0].str[1] + ':' + \
df.ColB.str[0].str[2] + ',+' + \
df.ColB.str[1].str[0] + ' ' + \
df.ColB.str[1].str[1] + ':' + \
df.ColB.str[1].str[2]
Run Code Online (Sandbox Code Playgroud)
输出:
ColA ColB ColC
0 A [[a, b, c], [d, e, f]] A>+a b:c,+d e:f
1 B [[f, g, h], [i, j, k]] B>+f g:h,+i j:k
2 A [[l, m, n], [o, p, q]] A>+l m:n,+o p:q
Run Code Online (Sandbox Code Playgroud)
df = pd.concat([df]*333)
温氏法
%%timeit df[['t1','t2']]=df['ColB'].apply(pd.Series).applymap(lambda x : ('{} {}:{}'.format(x[ 0],x[1],x[2]))) df.ColA+'>+'+df.t1+',+'+df.t2
1 个循环,3 次最佳:每个循环 363 毫秒
米拉杜洛法
%%timeit df.apply(lambda r:'{}>+{} {}:{},+{} {}:{}'.format(*展平(r)), axis=1)
10 个循环,3 个循环中最好的:每个循环 74.9 毫秒
斯科特波士顿法
%%timeit df.ColA + '>+' + df.ColB.str[0].str[0] + \ ' ' + df.ColB.str[0].str[1] + ':' + \ df .ColB.str[0].str[2] + ',+' + \ df.ColB.str[1].str[0] + ' ' + \ df.ColB.str[1].str[1] + ':' + \ df.ColB.str[1].str[2]
100 个循环,3 个循环中最好的:每个循环 12.4 毫秒
归档时间: |
|
查看次数: |
80 次 |
最近记录: |