使用 np.where 创建元素数量相同但内容不同的列表

问题描述 投票:0回答:1

我有一个 pandas 数据框,其中的值有时会变为 NA。我想用与另一列长度相同的字符串列表填充此列:

import pandas as pd
import numpy as np

df = pd.DataFrame({"a": ["one", "two"],
                   "b": ["three", "four"],
                   "c": [[1, 2], [3, 4]],
                   "d": [[5, 6], np.nan]})
a b c d
一个 [1, 2] [5, 6]
两个 [3, 4] NaN

我希望这成为

a b c d
一个 [1, 2] [5, 6]
两个 [3, 4] [无值,无值]
df["d"] = np.where(df.d.isna(),
                   [np.nan for element in df.c],
                   df.d) # this doesn't work

我试过了

df["d"] = np.where(df.d.isna(),
                   ['no_value' for element in df.c],
                   df.d)

df["d"] = np.where(df.d.isna(),
                   ['no_value'] * len(df.c),
                   df.d)

但是两者都不起作用。有人有想法吗?

python pandas numpy
1个回答
0
投票

一个可能的解决方案:

df.assign(d = df['d'].map(lambda x: ['a', 'b'] if x is np.nan else x))
© www.soinside.com 2019 - 2024. All rights reserved.