根据另外两个Pandas系列重写Pandas系列

j2cgzkjk  于 2023-03-06  发布在  其他
关注(0)|答案(2)|浏览(146)

我得到了3个Pandas系列,每个都有相同的索引。其中两个只包含真/假值,而第三个包含数字。如果2/3个不同时为真,是否可以更改第一个系列的值?
Pandas系列1
| 索引|价值观|
| - ------|- ------|
| 1个|小行星3453|
| 第二章|小行星8593|
Pandas系列2
| 索引|价值观|
| - ------|- ------|
| 1个|真的|
| 第二章|假|
Pandas系列3
| 索引|价值观|
| - ------|- ------|
| 1个|真的|
| 第二章|真的|
尝试在第1个系列中实现这一点
Pandas系列1
| 索引|价值观|
| - ------|- ------|
| 1个|小行星3453|
| 第二章|无|
我试过用for循环迭代,但是一直在努力正确地索引所有3个系列。

mitkmikd

mitkmikd1#

如果你所有的数据表都有相同的长度并且用相同的索引排序,试试这个:

first_data=pd.DataFrame({"index":[1,2],"values":[3453,8593]})
second_data=pd.DataFrame({"index":[1,2],"values":[True,False]})
third_data=pd.DataFrame({"index":[1,2],"values":[True,True]})
first_data["values"]*second_data["values"]*third_data["values"]
moiiocjp

moiiocjp2#

当然,您可以使用pd.Series.wherepd.Series.mask来根据其他一些布尔Series保留或屏蔽值:

import numpy as np
import pandas as pd

N = 10

s1 = pd.Series(np.random.randint(1000, 10000, size=N))
s2 = pd.Series(np.random.randint(2, size=N, dtype=bool))
s3 = pd.Series(np.random.randint(2, size=N, dtype=bool))

示例数据(为方便起见,此处显示为 Dataframe ):

s1     s2     s3
0  5003   True   True
1  7527  False  False
2  1637  False   True
3  4136   True  False
4  6079   True   True
5  6663  False   True
6  9371  False  False
7  2098  False   True
8  6692   True   True
9  7289  False   True

解决方案:

out = s1.where(s2 & s3, other=0)

输出:

0    5003
1       0
2       0
3       0
4    6079
5       0
6       0
7       0
8    6692
9       0

相关问题