如何添加键数未知的字典系列

时间:2019-02-12 16:26:28

标签: python pandas dictionary series bitwise-and

我创建了以下由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都是布尔值。

2 个答案:

答案 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)

有一个简单的单线解决方案来解决您的问题(如果您想对andA and BA 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