繁体   English   中英

根据条件在 pandas 中定位一行

[英]Locating a row in pandas based on a condition

所以这是一个常见问题,但我找不到适合这种特定情况的答案。

所以我有一个Dataframe类型的列,例如“戏剧,西部”和一个热门编码版本的类型,所以对于戏剧和西部,两列中都有一个1 ,但它只是西方类型,它的1代表该列, 0代表戏剧.

我想要一个过滤的 dataframe 包含只有西方而没有其他类型的行。 我试图对 model 进行过度采样,因为它是次要的 class 但我不想增加其他类型的数量作为副产品

有多行所以我不能使用索引并且有多种类型所以我不能使用像df[(df['Western']==1) & (df['Drama']==0)这样的条件df[(df['Western']==1) & (df['Drama']==0)无需考虑24种类型。

Index | Genre           |  Drama | Western | Action | genre 4 |
   0    Drama, Western       1        1         0         0
   1    Western              0        1         0         0
   3    Action, Western      0        1         1         0

如果我正确理解你的问题,你想要那些只有“西方”为 1 的行,即类型只有西方,没有别的。

为什么你必须使用编码列呢? 只需使用数据为字符串格式的原始“流派”列。 没有必要把事情复杂化。

new_df = df[df['Genre']=='Western']

制作一个流派的 column_list,如column_list = ['Western', 'Drama', 'Action', ...]并找到它的总和,如果它的总和等于 1,那么我们可以比较 'Western' 列的值,如果它等于 1。试试这个,这应该返回只有 'Western' 为 1 的行的索引:

column_list = ['Western', 'Drama', 'Action', ...]
df.loc[df[column_list].sum(axis=1)==1 and df['Western']==1, 'Index']

如果您没有Genre列,您可以这样做

df[
    (df['Western']==1)
    &
    (df[df.columns.difference(['Western'])]==0).all(axis=1)
]

暂无
暂无

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

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