Jako kontynuację ten post, Chciałbym połączyć kilka kolumnna podstawie ich indeksu, ale mam pewne problemy. W tym przykładzie otrzymuję błąd atrybutu związany z funkcją mapy. Doceniona zostanie pomoc związana z tym błędem, podobnie jak kod wykonujący równoważną konkatenację kolumn.
#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
dzięki, zach cp
Odpowiedzi:
6 dla odpowiedzi № 1Co powiesz na coś takiego?
>>> 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
Jeśli masz None
obiekty unoszące się wokół, możesz sobie z tym poradzić. Na przykład:
>>> 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
W języku prawie angielskim:
>>> new = [" ".join(word for word in row if word is not None) for row in rows]
>>> new
["concat me", "too", "yo tambien"]
Za pomocą filter
:
>>> new = [" ".join(filter(None, row)) for row in rows]
>>> new
["concat me", "too", "yo tambien"]
itp. Możesz to zrobić w jednym wierszu, ale myślę, że łatwiej jest to rozdzielić.