比较数据框列和系列

6
我是一名有用的助手,可以为您翻译文本。
我有一个数据框和一个序列,想要逐列地将DF与序列进行比较。
数据框(df)如下所示:
1   1 4 7
2   2 3 1
3   2 3 9

Series (s) 的样子如下:

1   3
2   4 
3   2

想进行布尔比较(其中列值小于系列值):

1   T F F
2   T T T
3   F F F

当然我可以使用循环,但应该有更简单的方法来做到这一点吧?


这是Pandas吗?如果是的话,你应该添加一个标签。 - Stephen Rauch
4个回答

6

使用lt,您可以指定一个轴。

df.lt(s, axis=0)

       1      2      3                   
1   True  False  False
2   True   True   True
3  False  False  False

默认情况下,轴的值为 1,使用重载运算符 < 的灵活性较差。正如DYZ在评论中提到的那样,在这里将 axis 默认设置为 1 是一个例外,因为通常它默认为 0(在其他函数如 applytransform 中)。


如果系列和数据框索引没有对齐,则仍然可以通过比较 s.values 来解决。

df.lt(s.values, axis=0)

       1      2      3                   
1   True  False  False
2   True   True   True
3  False  False  False

2
默认情况下,轴为1,这有点令人感到反直觉,因为对于大多数Pandas函数来说,轴0是默认轴。 - DYZ

3
(df.T<s).T
#       0      1      2
#0   True  False  False
#1   True   True   True
#2  False  False  False

2
使用 [:,None],将您的序列进行转换。
df.values<s.values[:,None]
Out[513]: 
array([[ True, False, False],
       [ True,  True,  True],
       [False, False, False]])

1
你可以在比较之前重新塑造你的系列。然后,你可以利用 numpybroadcasting 特性来进行比较。
df = pd.DataFrame({'0': {1: 1, 2: 2, 3: 2}, '1': {1: 4, 2: 3, 3: 3}, '2': {1: 7, 2: 1, 3: 9}})
s = pd.Series([3, 4, 2])

s.values.reshape(3, 1) > df

    0       1       2
1   True    False   False
2   True    True    True
3   False   False   False

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接