Select pandas 基于条件的系列元素
Select pandas Series elements based on condition
给定一个数据框,我知道我可以使用以下语法按条件 select 行:
df[df['colname'] == 'Target Value']
但是系列呢?系列没有列(轴 1)名称,对吗?
我的场景是通过 nunique() 函数创建了一个系列:
sr = df.nunique()
我想列出那些值为 1 的行的索引名称。
由于未能在网上找到明确的答案,我求助于以下解决方案:
for (colname, coldata) in sr.iteritems():
if coldata == 1:
print(colname)
问题:什么是获得答案的更好方法(即列出只有一个值的 Series 的索引名称(或原始 Dataframe 的列名称)?)
最终 objective 是找出 DF 中的哪些列具有一个且只有一个唯一值。因为我不知道如何直接从 DF 执行此操作,所以我首先使用了 nunique() 并给了我一个系列。因此我需要用“== 1”(即一个且只有一个)
来处理系列
希望我的问题不傻。
它会以同样的方式工作,因为 pandas 重载了 ==
运算符:
selected_series = series[series == my_value]
不清楚你想要什么。您是想处理数据框还是系列?
案例 1:处理 DataFrame
如果您想在数据框上工作以列出索引名称 那些值为 1 的行,您可以尝试:
df.index[df[df==1].any(axis=1)].tolist()
演示
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
然后,运行 代码,它给出:
[1, 3, 4]
案例 2:处理系列
如果要提取值为1的Series的索引,可以提取成一个列表,如下:
sr.loc[sr == 1].index.tolist()
或使用:
sr.index[sr == 1].tolist()
给定一个数据框,我知道我可以使用以下语法按条件 select 行:
df[df['colname'] == 'Target Value']
但是系列呢?系列没有列(轴 1)名称,对吗?
我的场景是通过 nunique() 函数创建了一个系列:
sr = df.nunique()
我想列出那些值为 1 的行的索引名称。
由于未能在网上找到明确的答案,我求助于以下解决方案:
for (colname, coldata) in sr.iteritems():
if coldata == 1:
print(colname)
问题:什么是获得答案的更好方法(即列出只有一个值的 Series 的索引名称(或原始 Dataframe 的列名称)?)
最终 objective 是找出 DF 中的哪些列具有一个且只有一个唯一值。因为我不知道如何直接从 DF 执行此操作,所以我首先使用了 nunique() 并给了我一个系列。因此我需要用“== 1”(即一个且只有一个)
来处理系列希望我的问题不傻。
它会以同样的方式工作,因为 pandas 重载了 ==
运算符:
selected_series = series[series == my_value]
不清楚你想要什么。您是想处理数据框还是系列?
案例 1:处理 DataFrame
如果您想在数据框上工作以列出索引名称 那些值为 1 的行,您可以尝试:
df.index[df[df==1].any(axis=1)].tolist()
演示
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
然后,运行 代码,它给出:
[1, 3, 4]
案例 2:处理系列
如果要提取值为1的Series的索引,可以提取成一个列表,如下:
sr.loc[sr == 1].index.tolist()
或使用:
sr.index[sr == 1].tolist()