繁体   English   中英

pandas 数据帧中的 Boolean 索引

[英]Boolean indexing in pandas dataframes

我正在尝试将 boolean 索引应用于 pandas DataFrame。

nm - 存储玩家的名字

ag - 存储玩家年龄

sc - 存储分数

capt - 存储 boolean 索引值

import pandas as pd 
nm=pd.Series(['p1','p2', 'p3', 'p4'])
ag=pd.Series([12,17,14, 19])
sc=pd.Series([120, 130, 150, 100])
capt=[True, False, True, True]
Cricket=pd.DataFrame({"Name":nm,"Age":ag ,"Score":sc}, index=capt)
print(Cricket) 

Output:

       Name  Age  Score
True   NaN  NaN    NaN
False  NaN  NaN    NaN
True   NaN  NaN    NaN
True   NaN  NaN    NaN

每当我运行上面的代码时,我都会得到一个 DataFrame 填充了 NaN 值。 这似乎工作的唯一情况是当 capt 没有重复元素时。

即当capt=[False, True] (并且为 nm、ag 和 sc 给出了合理的值)时,此代码按预期工作。

我正在运行python 3.8.5、pandas 1.1.1这是不推荐使用的功能吗?

所需的 output:

        Name  Age  Score
True    p1   12    120
False   p2   17    130
True    p3   14    150
True    p4   19    100

为每个 Series 设置索引值,以避免每个 Series 的默认 RangeIndex 与capt的新索引值不匹配:

capt=[True, False, True, True]
nm=pd.Series(['p1','p2', 'p3', 'p4'], index=capt)
ag=pd.Series([12,17,14, 19], index=capt)
sc=pd.Series([120, 130, 150, 100], index=capt)

Cricket=pd.DataFrame({"Name":nm,"Age":ag ,"Score":sc})
print(Cricket) 
      Name  Age  Score
True    p1   12    120
False   p2   17    130
True    p3   14    150
True    p4   19    100

详情

print(pd.Series(['p1','p2', 'p3', 'p4'])) 
0    p1
1    p2
2    p3
3    p4
dtype: object

print(pd.Series(['p1','p2', 'p3', 'p4'], index=capt)) 
True     p1
False    p2
True     p3
True     p4
dtype: object

Boolean indexing过滤:

capt=[True, False, True, True]
nm=pd.Series(['p1','p2', 'p3', 'p4'])
ag=pd.Series([12,17,14, 19])
sc=pd.Series([120, 130, 150, 100])

Cricket=pd.DataFrame({"Name":nm,"Age":ag ,"Score":sc})
print(Cricket) 
  Name  Age  Score
0   p1   12    120
1   p2   17    130
2   p3   14    150
3   p4   19    100

print (Cricket[capt])
  Name  Age  Score
0   p1   12    120
2   p3   14    150
3   p4   19    100

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM