繁体   English   中英

Pandas 根据另一个 dataframe 将最后 N 列变成 NA

[英]Pandas turn last N columns into NA based on another dataframe

我有以下数据框:

df1 = pd.DataFrame(data={'col1': ['a', 'd', 'g', 'j'], 
                        'col2': ['b', 'c', 'i', np.nan], 
                        'col3': ['c', 'f', 'i', np.nan],
                        'col4': ['x', np.nan, np.nan, np.nan]},
                index=pd.Series(['ind1', 'ind2', 'ind3', 'ind4'], name='index'))
指数 col1 列2 列3 列4
ind1 一种 b c X
ind2 d c F 钠盐
ind3 G 一世 一世 钠盐
ind4 j 钠盐 钠盐 钠盐
df2 = pd.Series(data=[True, False, True, False],
                index=pd.Series(['ind1', 'ind2', 'ind3', 'ind4']))
ind1 真的
ind2 错误的
ind3 真的
ind4 错误的

如何根据df2的 boolean 值将df1中每一行的最后 2 个值设为 NA?

在这种情况下,由于ind1ind3为真,它会影响df1中的相同索引。

指数 col1 列2 列3 列4
ind1 一种 b 钠盐 钠盐
ind2 d c F 钠盐
ind3 G 一世 钠盐 钠盐
ind4 j 钠盐 钠盐 钠盐

一个可能的解决方案,基于pandas.DataFrame.mask

df1[['col3', 'col4']] = df1[['col3', 'col4']].mask(df2)

Output:

      col1 col2 col3 col4
index                    
ind1     a    b  NaN  NaN
ind2     d    c    f  NaN
ind3     g    i  NaN  NaN
ind4     j  NaN  NaN  NaN

您可以使用boolean 索引

N = 2
df1.iloc[df2, -N:] = np.nan

注意。 你所说的df2实际上是一个系列, s / ser作为名称可能更合适。

output:

      col1 col2 col3 col4
index                    
ind1     a    b  NaN  NaN
ind2     d    c    f  NaN
ind3     g    i  NaN  NaN
ind4     j  NaN  NaN  NaN

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM