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

2024-04-19 07:48:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下df1:

Person  Day1  Day2  Day3
1       2     1     1
2       2     0     7
3       4     1     2

然后是另一个df2:

Person  Day1  Day2  Day3
1       a     b     b
2       a     c     a
3       c     b     c

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

满足条件时,结果应为df1中的值,否则为0:

Person  Day1  Day2  Day3
1       0     0     0
2       0     0     0
3       4     0     2

Tags: 数据元素persondf1df2day1day2day3
2条回答

在@jezrael的帮助下,使用^{}的另一个解决方案:

import numpy as np
df = pd.DataFrame(np.where(df2.eq('c'), df1, 0), index=df1.index, columns=df1.columns).reset_index()

输出:

   Person  Day1  Day2  Day3
0       1     0     0     0
1       2     0     0     0
2       3     4     0     2

如果第一列是索引,请使用^{}

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

如果第一列不是索引,一个可能的想法是选择没有第一列的所有列,然后重新分配:

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

或:

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

相关问题 更多 >