Як слідувати до цей пост, Я хотів би об'єднати ряд стовпціввиходячи з їх індексу, але у мене виникають деякі проблеми. У цьому прикладі я отримую помилку атрибутів, пов’язану з функцією карти. Довідка навколо цієї помилки буде вдячна, як і код, який робить еквівалентне конкатенація стовпців.
#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
Відповіді:
6 за відповідь № 1Як про щось подібне?
>>> 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"]
Ви можете зробити це в один рядок, але я вважаю, що це зрозуміліше розділити.