使用带有布尔掩码的df.loc[]和df[]简写,pandas

rsl1atfo  于 2023-06-20  发布在  其他
关注(0)|答案(1)|浏览(119)

df[booleanMask]和df.loc [booleanMask]都对我有效,但我不明白为什么。不使用.loc的简写df[]我认为应用于列,而我试图应用于行,所以我认为我需要使用.loc
下面是具体代码:

# Boolean operators
# All the games where a team scored at least 4 goals and won to nil
hw_4_0 = (pl23['FTHG'] >= 4) & (pl23['FTAG'] == 0)
aw_0_4 = (pl23['FTHG'] == 0) & (pl23['FTAG'] >= 4)
pl23.loc[aw_0_4 | hw_4_0]

例如,pl23.loc[aw_0_4| hw_4_0,:]也可以工作,但pl23.loc[:,aw_0_4| [hw_4_0]没有。我认为df[boolean mask]是后者的简写(和索引一样),那么为什么它在这个例子中起作用呢?
使用pl23.loc[aw_0_4| hw_4_0],它返回查询所针对的 Dataframe ,而我期望的是IndexingError:作为索引器提供的布尔系列不可对齐(布尔系列的索引和索引对象的索引不匹配)。

7cwmlq89

7cwmlq891#

df[…] vs df.loc[…]适用于列vs索引,当您使用标签时
如果你传递一个boolean Series(或其他iterable)来进行boolean索引,那么它们都作用于索引级别。要对列执行布尔索引,需要df.loc[:, …]
示例:

df = pd.DataFrame({'col1': [1, 2, 3], 'col2': [4, 5, 6]})

# select "col1" in the columns
df['col1']

# select "0" in the index
df.loc[0]

# boolean indexing on the index
df[df['col1'].ge(2)]
# or
df.loc[df['col1'].ge(2)]
# or
df[[False, True, True]]
# or
df.loc[[False, True, True]]

# boolean indexing on the columns
df.loc[:, df.loc[0].ge(2)]
# or
df.loc[:, [False, True]]

相关问题