Как обновить ячейку, содержащую список, используя значения из pd.Series? - PullRequest
1 голос
/ 17 марта 2020

У меня есть следующий фрейм данных:

df = pd.DataFrame({'cols': ['a', 'b', 'c'], 'vals': [[1,2], [3,4], [5,6]]})
series = pd.Series([3,5])
df
OUT:
    cols    vals
0   a   [1, 2]
1   b   [3, 4]
2   c   [5, 6]

series
OUT:
0    3
1    5

Я хотел бы получить следующий результат:


cols    vals
0   a   [1, 2, 3]
1   b   [3, 4, 5]
2   c   [5, 6]

Как мне добиться этого без использования itterrows?

Ответы [ 3 ]

3 голосов
/ 17 марта 2020

Альтернативно с explode

df['vals'] = df['vals'].explode().append(series).groupby(level=0).agg(list)
print(df)

  cols       vals
0    a  [1, 2, 3]
1    b  [3, 4, 5]
2    c     [5, 6]
3 голосов
/ 17 марта 2020

старый добрый += с выравниванием по индексу:

df.loc[series.index, 'vals'] += pd.Series([[i] for i in series], index=series.index)
3 голосов
/ 17 марта 2020

Вы можете использовать понимание списка и присвоение фрагмента обратно vals (предполагается, что индекс является нормальным range):

df.loc[:len(series)-1, 'vals'] = [i+[j] for i,j in zip(df.loc[:len(series)-1, 'vals'], series)]

print(df)

   cols       vals
0    a  [1, 2, 3]
1    b  [3, 4, 5]
2    c     [5, 6]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...