我创建了以下由test
个对象组成的字典Series
:
test = {
'A': pd.Series([True, False, True]),
'B' : pd.Series([True,False,False])
}
我想表演test['A'] & test['B']
。我的问题是我想对字典中任意数量的键进行按位加法。 (即可以是'A'
或'A' and 'B'
或'A' and 'B' and 'C'
等)。无论如何,每个键的值都具有相同的长度,并且所有Series
都是布尔值。
答案 0 :(得分:1)
使用DataFrame
而不是Series
对象的字典有很多优点。从后者转换为前者是微不足道的:
>>> df = pd.DataFrame(test)
>>> df
A B
0 True True
1 False False
2 True False
虽然DataFrame
构造函数在解析输入数据方面非常聪明,但是您可以使用from_dict
classmethod
明确地告诉它您是从字典进行初始化的:
>>> df = pd.DataFrame.from_dict(test)
现在,您可以使用all
方法在任意轴上应用&
:
>>> df.all(axis=1) # going across
0 True
1 False
2 False
dtype: bool
使用any
的|
也是如此:
>>> df.any(axis=1)
0 True
1 False
2 True
dtype: bool
答案 1 :(得分:0)
有一个简单的单线解决方案来解决您的问题(如果您想对and
,A and B
,A and B and C
等列进行累积A and B and C and D
操作):
import pandas as pd
test = {
"A": pd.Series([True, True, True]),
"B": pd.Series([True, False, False]),
"C": pd.Series([False, True, False]),
"D": pd.Series([True, False, False]),
}
df = pd.DataFrame.from_dict(test)
# Here is da man
print(df.cummin(axis="columns"))
使用cummin
,如果任何值为False
,则其后的所有值均为False
,并且是最小值。
原始数据框:
A B C D
0 True True False True
1 True False True False
2 True False False False
累积and
:
A B C D
0 True True False False
1 True False False False
2 True False False False
第一列是A
,第二列是A and B
,第三列是A and B and C
,最后一列是A and B and C and D
。