簡體   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