作为this post的后续内容,我想根据索引连接多个列,但我遇到了一些问题。在这个例子中,我得到一个与map函数相关的Attribute错误。可以理解这个错误的帮助,以及执行列的等效串联的代码。
#data
df = DataFrame({'A':['a','b','c'], 'B':['d','e','f'], 'C':['concat','me','yo'], 'D':['me','too','tambien']})
#row function to concat rows with index greater than 2
def cnc(row):
temp = []
for x in range(2,(len(row))):
if row[x] != None:
temp.append(row[x])
return map(concat, temp)
#apply function per row
new = df.apply(cnc,axis=1)
#Expected Output
new
concat me
me too
yo tambien
感谢, zach cp
答案 0 :(得分:6)
这样的事情怎么样?
>>> from pandas import *
>>> df = DataFrame({'A':['a','b','c'], 'B':['d','e','f'], 'C':['concat','me','yo'], 'D':['me','too','tambien']})
>>> df
A B C D
0 a d concat me
1 b e me too
2 c f yo tambien
>>> df.columns[2:]
Index([C, D], dtype=object)
>>> df[df.columns[2:]]
C D
0 concat me
1 me too
2 yo tambien
>>> [' '.join(row) for row in df[df.columns[2:]].values]
['concat me', 'me too', 'yo tambien']
>>> df["new"] = [' '.join(row) for row in df[df.columns[2:]].values]
>>> df
A B C D new
0 a d concat me concat me
1 b e me too me too
2 c f yo tambien yo tambien
如果你周围有None
个物体,你也可以处理它。例如:
>>> df["C"][1] = None
>>> df
A B C D
0 a d concat me
1 b e None too
2 c f yo tambien
>>> rows = df[df.columns[2:]].values
近英语:
>>> new = [' '.join(word for word in row if word is not None) for row in rows]
>>> new
['concat me', 'too', 'yo tambien']
使用filter
:
>>> new = [' '.join(filter(None, row)) for row in rows]
>>> new
['concat me', 'too', 'yo tambien']
等。你可以在一行中完成它,但我认为将它分开是更清楚的。