Python Dataframe将NaN替换为列表中的值
我想用NaN来代替我的专栏Python Dataframe将NaN替换为列表中的值,python,pandas,dataframe,Python,Pandas,Dataframe,我想用NaN来代替我的专栏 group_choices = ['Group1', 'Group2', 'Group3'] Groups limit 1 NaN NaN 2 Group1 2 3 Group2 2 4 Group3 2 5 NaN NaN 6 NaN NaN 7 NaN NaN 如何根据组选择随机替换NaN 我还试图限制由于限制列中的限制值,可以随机选择组选项的频率 我试图得到这个结果: Groups limit 1 Group3 NaN 2 Group1 2 3 Group2
group_choices = ['Group1', 'Group2', 'Group3']
Groups limit
1 NaN NaN
2 Group1 2
3 Group2 2
4 Group3 2
5 NaN NaN
6 NaN NaN
7 NaN NaN
如何根据组选择随机替换NaN
我还试图限制由于限制列中的限制值,可以随机选择组选项的频率
我试图得到这个结果:
Groups limit
1 Group3 NaN
2 Group1 2
3 Group2 2
4 Group3 2
5 Group1 NaN
6 Group2 NaN
7 Out of groups
fillna
与字典
旧答案 有用,但我更喜欢新的。它说明了我思维过程的演变 发电机
另类
def get_some(i, n):
for x in [*i] * n:
yield x
df.assign(Groups=df.Groups.fillna(
df.Groups.loc[pd.isna].pipe(
lambda s: pd.Series(dict(zip(s.index, get_some(group_choices, 1))))
)
).fillna('Out of groups'))
@我又更新了我的帖子。你可能会更喜欢这个新版本。哇,你真是太棒了,谢谢你,上面的那个看起来很恶心!
def get_some(i, n):
for x in [*i] * n:
yield x
def fill(s, i, n):
gs = get_some(i, n)
for x in s:
if pd.isnull(x):
try:
yield next(gs)
except StopIteration:
yield "Out of groups"
else:
yield x
df.assign(Groups=[*fill(df.Groups, group_choices, 1)])
Groups limit
1 Group1 NaN
2 Group1 2.0
3 Group2 2.0
4 Group3 2.0
5 Group2 NaN
6 Group3 NaN
7 Out of groups NaN
def get_some(i, n):
for x in [*i] * n:
yield x
df.assign(Groups=df.Groups.fillna(
df.Groups.loc[pd.isna].pipe(
lambda s: pd.Series(dict(zip(s.index, get_some(group_choices, 1))))
)
).fillna('Out of groups'))