我有一个下面的Pandas表
DF:
EVNT_ID col1 col2 col3 col4
123454 1 Nan 4 5
628392 Nan 3 Nan 7
293899 2 Nan Nan 6
127820 9 11 12 19
现在,我尝试将除第一列之外的所有列进行concat,并希望数据框的外观如下所示
新定义:
EVNT_ID col1 col2 col3 col4 new_col
123454 1 Nan 4 5 1|4|5
628392 Nan 3 Nan 7 3|7
293899 2 Nan Nan 6 2|6
127820 9 11 12 19 9|11|12|19
我正在使用以下代码
df['new_column'] = df[~df.EVNT_ID].apply(lambda x: '|'.join(x.dropna().astype(str).values), axis=1)
但它给出了以下错误
第一个月
如果有人能告诉我我错在哪里,我会非常感激。
4条答案
按热度按时间vnjpjtjt1#
请尝试以下代码:
最初我考虑使用
x.dropna()
而不是x if str(el) != 'nan'
,但是%timeit
显示dropna()
的工作速度要慢得多。tyg4sfes2#
您可以使用
filter
和agg
执行此操作:或者,
如果性能很重要,可以使用列表解析:
如果您可以原谅为DataFrame赋值的开销,下面是两个最快解决方案的时间安排。
不过请注意,由于@RafaelC的代码生成浮点数,因此答案并不相同:
['1.0|2.0|9.0', '3.0|11.0', ...]
。如果这是好的,那么很好。否则你需要转换成int,这会增加更多的开销。8aqjt8rx3#
使用列表解析和
zip
时机似乎不错
axzmvihb4#