当前位置: 首页 > 知识库问答 >
问题:

按列表中(不)的索引值对数据帧进行切片

詹甫
2023-03-14

我有一个pandasdataframe,df

我想选择df中不在列表中的所有索引,黑名单

现在,我使用列表理解来创建想要切片的标签。

ix=[i for i in df.index if i not in blacklist]  
df_select=df.loc[ix]

工作正常,但如果我需要经常这样做,可能会很笨拙。

有更好的方法吗?


共有3个答案

史意致
2023-03-14

感谢ASGM;我发现我需要将集合转换为列表,以使其与多索引一起工作:

mi1 = pd.MultiIndex.from_tuples([("a", 1), ("a", 2), ("b", 1), ("b", 2)])
df1 = pd.DataFrame(data={"aaa":[1,2,3,4]}, index=mi1)
setValid = set(df1.index) - set([("a", 2)])
df1.loc[list(setValid)] # works
df1.loc[setValid] # fails

(抱歉无法评论,代表不足)

任绪
2023-03-14

您可以使用set()在原始索引和要删除的索引之间创建差异:

df.loc[set(df.index) - set(blacklist)]

它的优点是节省,而且比列表理解更容易阅读。

明阳旭
2023-03-14

在索引上使用isin,并反转布尔索引以执行标签选择:

In [239]:

df = pd.DataFrame({'a':np.random.randn(5)})
df
Out[239]:
          a
0 -0.548275
1 -0.411741
2 -1.187369
3  1.028967
4 -2.755030
In [240]:

t = [2,4]
df.loc[~df.index.isin(t)]
Out[240]:
          a
0 -0.548275
1 -0.411741
3  1.028967
 类似资料:
  • 问题内容: 我有一个数据框。 我想选择在所有指数是 不是 在列表中, 现在,我使用列表理解来创建所需的标签以进行切片。 工作正常,但如果我经常需要这样做可能会很笨拙。 有一个更好的方法吗? 问题答案: 在索引上使用并反转布尔索引以执行标签选择:

  • 我有一个多索引数据框,看起来像 uid tid文本 abc x t1 bcd y t2 uid 和 tid 是索引。我有一个 uid 列表,并希望获取与该列表中的 uid 相对应的行,但保留第 2 级索引值 (tid)。我想在不运行任何显式循环的情况下执行此操作。这可能吗?

  • 我有一个数据框架,看起来像这样: 我想对数据帧进行切片,以便结果包含所有以<code>foo 获得此结果的一种方法是 但这感觉像是一个非常繁琐的方法,必须有一个更“pythonic”的方法..

  • 我有两个形状相同的python数据帧,例如: 我想使用df2中的值作为行索引来选择df1中的值,并创建一个形状相等的新数据帧。预期结果: 我已尝试使用.loc,它在单个列中运行良好: 但是我不能同时在所有列上使用. loc或. iloc。我想避免循环来优化性能,因为我正在处理一个大数据帧。有什么想法吗?

  • 我想将以下数据框的第1列重命名为“Ref”。我有很多列,因此无法重命名每个列或为每个列设置名称。 这是数据帧 现在我想将第一列重命名为'Ref'。我试过这个 它重命名所有标题与列[1]相似的列。

  • 我有一个这种格式的数据框 我希望使用数据帧操作获得基于行的特定值的所有(索引、列)对。所有(索引、列、行值)对都是唯一的。 我研究了这个问题:pythonic方法获取索引,column for value==1 虽然这个问题和我的问题完全一样,但这个问题的答案有点模糊,我无法根据这些答案得到我想要的。 我也看过类似的: a) 从数据框中选择特定索引、列对 b) Python:获取与特定值匹配的行的