Панды объединяют значения всех столбцов в новый список столбцов - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь объединить все мои столбцы в новый столбец.Объединенные значения должны храниться в списке.

Мой фрейм данных:

df = pd.DataFrame({'A': ['1', '2', nan], 
                   'B': [nan, '5', nan], 
                   'C': ['7', nan, '9']})

желаемый вывод:

df:

A   B   C   concat_col
1   nan 7   [1,7]
2   5   nan [2,5]
nan nan 9   [9]

Что я пробовал:

df['concat'] = pd.Series(df.fillna('').values.tolist()).str.join(',')

Вывод, который я получил:

A   B   C   concat_col
1   nan 7   1,,7
2   5   nan 2,5,,
nan nan 9   ,,9

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Вы можете использовать понимание списка, воспользовавшись тем, что np.nan != np.nan:

df['D'] = [[i for i in row if i == i] for row in df.values]

print(df)

     A    B    C       D
0    1  NaN    7  [1, 7]
1    2    5  NaN  [2, 5]
2  NaN  NaN    9     [9]

Противоположно, это более эффективно, чем методы Pandas:

df = pd.concat([df]*10000, ignore_index=True)

%timeit df.apply(lambda row: row.dropna().tolist(), axis=1)  # 8.25 s
%timeit [[i for i in row if i == i] for row in df.values]    # 55.6 ms
0 голосов
/ 26 сентября 2018

Следующий код должен работать:

df['concat_col']=df.apply(lambda row: row.dropna().tolist(), axis=1)
...