根据条件在 pandas 中定位一行
Locating a row in pandas based on a condition
所以这是一个常见问题,但我找不到适合这种特定情况的答案。
所以我有一个 Dataframe
,其中包含流派的列,例如“戏剧,西部片”和一个流派的热编码版本,所以对于戏剧和西部片,有一个 1 在两列中,但它只是西方类型,它的 1 用于该列 0 用于戏剧。
我想要一个过滤后的数据框,其中包含仅包含西部风格而没有其他类型的行。我正在尝试对模型进行过采样,因为它是次要的 class,但我不想增加其他类型的数量作为副产品
有多行,所以我不能使用索引,而且有多种类型,所以我不能在不考虑 24[=26 的情况下使用像 df[(df['Western']==1) & (df['Drama']==0)
这样的条件=] 流派。
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
如果我对你的问题的理解正确,你想要那些只有 'Western' 是 1 的行,即流派只有西方,没有别的。
那为什么要使用编码列呢?只需使用数据为字符串格式的原始 'Genre' 列即可。无需将事情复杂化。
new_df = df[df['Genre']=='Western']
做一个column_list类型的column_list = ['Western', 'Drama', 'Action', ...]
求和,如果和等于1,那么我们可以比较'Western'列的值是否相等到 1. 试试这个,这应该 return 只有 '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)
]
所以这是一个常见问题,但我找不到适合这种特定情况的答案。
所以我有一个 Dataframe
,其中包含流派的列,例如“戏剧,西部片”和一个流派的热编码版本,所以对于戏剧和西部片,有一个 1 在两列中,但它只是西方类型,它的 1 用于该列 0 用于戏剧。
我想要一个过滤后的数据框,其中包含仅包含西部风格而没有其他类型的行。我正在尝试对模型进行过采样,因为它是次要的 class,但我不想增加其他类型的数量作为副产品
有多行,所以我不能使用索引,而且有多种类型,所以我不能在不考虑 24[=26 的情况下使用像 df[(df['Western']==1) & (df['Drama']==0)
这样的条件=] 流派。
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
如果我对你的问题的理解正确,你想要那些只有 'Western' 是 1 的行,即流派只有西方,没有别的。
那为什么要使用编码列呢?只需使用数据为字符串格式的原始 'Genre' 列即可。无需将事情复杂化。
new_df = df[df['Genre']=='Western']
做一个column_list类型的column_list = ['Western', 'Drama', 'Action', ...]
求和,如果和等于1,那么我们可以比较'Western'列的值是否相等到 1. 试试这个,这应该 return 只有 '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)
]