[英]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.