根据条件选择pandas系列元素

0 python series pandas

给定一个数据框,我知道我可以使用以下语法按条件选择行:

df[df['colname'] == 'Target Value']

但是系列呢?系列没有列(轴 1)名称,对吗?

我的场景是我通过 nunique() 函数创建了一个系列:

sr = df.nunique()

我想列出那些值​​为 1 的行的索引名称。

由于在网上找不到明确的答案,我采取了以下解决方案:

for (colname, coldata) in sr.iteritems(): 
   if coldata == 1: 
      print(colname) 
Run Code Online (Sandbox Code Playgroud)

问题:获得答案的更好方法是什么(即列出只有一个值的 Series 的索引名称(或原始 Dataframe 的列名称)?)

最终目标是找到 DF 中的哪些列具有且仅有一个唯一值。由于我不知道如何直接从 DF 执行此操作,因此我首先使用 nunique() ,这给了我一个系列。因此我需要用“== 1”(即一个且只有一个)来处理该系列

我希望我的问题并不愚蠢。

Sea*_*ean 6

目前还不清楚你想要什么。您是想处理数据框还是系列?

案例 1:使用 DataFrame

如果您想处理数据框以列出值为 1 的那些行的索引名称,您可以尝试:

df.index[df[df==1].any(axis=1)].tolist()
Run Code Online (Sandbox Code Playgroud)

演示

data = {'Col1': [0, 1, 2, 2, 0], 'Col2': [0, 2, 2, 1, 2], 'Col3': [0, 0, 0, 0, 1]}
df = pd.DataFrame(data)

   Col1  Col2  Col3
0     0     0     0
1     1     2     0
2     2     2     0
3     2     1     0
4     0     2     1
Run Code Online (Sandbox Code Playgroud)

然后,运行代码,它给出:

[1, 3, 4]
Run Code Online (Sandbox Code Playgroud)

案例 2:制作系列作品

如果要提取值为1的Series的索引,可以将其提取到列表中,如下所示:

sr.loc[sr == 1].index.tolist()
Run Code Online (Sandbox Code Playgroud)

或使用:

sr.index[sr == 1].tolist()
Run Code Online (Sandbox Code Playgroud)

  • 感谢 SeaBean gshpychka user1740577 所有好的(最终)和不同的答案(方法),但是由于“如果它解决了您的问题或对找到您的解决方案最有帮助,请接受这个答案”,SeaBean 得到了点头(我很困惑 - 可以我接受不止一个?-因为所有三个答案都有优点和缺点,所有三个答案都以一种或其他方式“解决”了我的问题,但 SeaBean 的案例 2 可以说是最好的,因为它以更易读的列表格式出现)@gshpychka 是最简洁,并且包含教学元素 (2认同)