Pandas:根据条件从 df 中提取数据到新的 df

Ziz*_*upp 2 python dataframe pandas

我有以下 df1:

Person  Day1  Day2  Day3
1       2     1     1
2       2     0     7
3       4     1     2
Run Code Online (Sandbox Code Playgroud)

然后是另一个 df2:

Person  Day1  Day2  Day3
1       a     b     b
2       a     c     a
3       c     b     c
Run Code Online (Sandbox Code Playgroud)

所以这两个数据帧具有相同的索引和列。如何选择df2中只有“c”的df1元素?

当条件满足时,结果应该是来自 df1 的值,否则为 0:

Person  Day1  Day2  Day3
1       0     0     0
2       0     0     0
3       4     0     2
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 6

如果第一列是索引使用DataFrame.where

df = df1.where(df2.eq('c'), 0)
print (df)
        Day1  Day2  Day3
Person                  
1          0     0     0
2          0     0     0
3          4     0     2
Run Code Online (Sandbox Code Playgroud)

如果第一列不是索引,一个可能的想法是选择所有列而不是 first 并分配回来:

df1.iloc[:, 1:]= df1.iloc[:, 1:].where(df2.iloc[:, 1:].eq('c'), 0)
print (df1)
   Person  Day1  Day2  Day3
0       1     0     0     0
1       2     0     0     0
2       3     4     0     2
Run Code Online (Sandbox Code Playgroud)

或者:

df = df1.set_index('Person').where(df2.set_index('Person').eq('c'), 0).reset_index()
print (df)
   Person  Day1  Day2  Day3
0       1     0     0     0
1       2     0     0     0
2       3     4     0     2
Run Code Online (Sandbox Code Playgroud)