给定一个数据框,我知道我可以使用以下语法按条件选择行:
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”(即一个且只有一个)来处理该系列
我希望我的问题并不愚蠢。
目前还不清楚你想要什么。您是想处理数据框还是系列?
如果您想处理数据框以列出值为 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)
如果要提取值为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)