gpt4 book ai didi

python - 如果其他矩阵值等于 Pandas 中的某个值,则用 NaN 替换值

转载 作者:行者123 更新时间:2023-12-04 09:16:48 27 4
gpt4 key购买 nike

我有两个多索引数据帧; 1 指示哪个玩家在服务器上,另一个跟踪点数。在此,发球者在每场比赛中轮换。

col0 = ['Game 1','Game 1','Game 2','Game 2','Game 3','Game 3','Game 4','Game 4','Game 5','Game 5']
col1 = ['P1','P2','P1','P2','P1','P2','P1','P2','P1','P2']
a = pd.DataFrame(data = np.random.rand(3,10))
a.columns = [col0,col1]

Game 1 Game 2 ... Game 4 Game 5
P1 P2 P1 ... P2 P1 P2
0 0.375562 0.408865 0.107393 ... 0.552553 0.986619 0.635726
1 0.101053 0.949870 0.804260 ... 0.895951 0.384401 0.368055
2 0.879938 0.740631 0.369314 ... 0.624967 0.061308 0.625157
和数据框“b”指示哪个球员在发球。
col0 = ['Game 1','Game 2','Game 3','Game 4','Game 5']
col1 = ['Server','Server','Server','Server','Server']
b = pd.DataFrame([[1,2,1,2,1],
[2,1,2,1,2],
[1,2,1,2,1]])
b.columns = [col0, col1]

Game 1 Game 2 Game 3 Game 4 Game 5
Server Server Server Server Server
0 1 2 1 2 1
1 2 1 2 1 2
2 1 2 1 2 1
现在我想创建数据框 c,它看起来像:
     Game 1              Game 2  ...    Game 4    Game 5          
P1 P2 P1 ... P2 P1 P2
0 0.375562 0.408865 np.nan ... np.nan 0.986619 0.635726
1 np.nan np.nan 0.804260 ... 0.895951 np.nan np.nan
2 0.879938 0.740631 np.nan ... np.nan 0.061308 0.625157
我希望数据框“a”的值在玩家 2 发球时被 NaN 替换。例如,在数据帧“c”的第一行中,仅显示了第 1 场、第 3 场和第 5 场比赛中的得分,因为球员 1 在这些比赛中都在发球。
什么都会有帮助!

最佳答案

你可以试试 reindex , replacewhere :
选项 1

temp=b.reindex(columns=map(lambda x:(x[0],'Server') ,a.columns)).replace({1:True,2:False})
a.where(temp.values)

np.where 相同:
选项 2
import numpy as np
temp=b.reindex(columns=map(lambda x:(x[0],'Server') ,a.columns))
pd.DataFrame(np.where(temp.eq(1), a, np.nan),columns=a.columns)

和修改原来的b一样,用 where应用掩码:
选项 3
msk=[x.repeat(2)==1 for x in b.values]
a.where(msk)

选项 1 的详细信息:
首先映射 a 的列像这样:
list(map(lambda x:(x[0],'Server') ,a.columns))
[('Game 1', 'Server'), ('Game 1', 'Server'), ('Game 2', 'Server'), ('Game 2', 'Server'), ('Game 3', 'Server'), ('Game 3', 'Server'), ('Game 4', 'Server'), ('Game 4', 'Server'), ('Game 5', 'Server'), ('Game 5', 'Server')]
然后你使用 reindex使用该映射列表:
b.reindex(columns=map(lambda x:(x[0],'Server') ,a.columns))
Game 1 Game 2 Game 3 Game 4 Game 5
Server Server Server Server Server Server Server Server Server Server
0 1 1 2 2 1 1 2 2 1 1
1 2 2 1 1 2 2 1 1 2 2
2 1 1 2 2 1 1 2 2 1 1
之后,您使用 replace获取 temp 的更改值:
b.reindex(columns=map(lambda x:(x[0],'Server') ,a.columns)).replace({1:True,2:False})
Game 1 Game 2 Game 3 Game 4 Game 5
Server Server Server Server Server Server Server Server Server Server
0 True True False False True True False False True True
1 False False True True False False True True False False
2 True True False False True True False False True True
最后你使用 where 映射使用此掩码( temp ) a 的值:
a.where(temp.values)
Game 1 Game 2 Game 3 Game 4 \
P1 P2 P1 P2 P1 P2 P1
0 0.973453 0.02111 NaN NaN 0.435252 0.335656 NaN
1 NaN NaN 0.195463 0.960642 NaN NaN 0.527152
2 0.280339 0.97697 NaN NaN 0.833331 0.476428 NaN

Game 5
P2 P1 P2
0 NaN 0.676733 0.600626
1 0.924126 NaN NaN
2 NaN 0.675638 0.319161

关于python - 如果其他矩阵值等于 Pandas 中的某个值,则用 NaN 替换值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63180770/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com