[英]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?
在这种情况下,由于ind1
和ind3
为真,它会影响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.