繁体   English   中英

检查值是否在pandas.DataFrame的列列表中

[英]Check if a value is in a list of columns in a pandas.DataFrame

我正在pandas.DataFrame中处理一些看起来像这样(简化)的数据:

|-----------|-----------|-----------|
| Feature 1 | Feature 2 | Feature 3 |
|-----------|-----------|-----------|
|     A     |     B     |     D     |
|     A     |     A     |     B     |
|     A     |     D     |     A     |
|     A     |     B     |     A     |
|     A     |     A     |     A     |
|     A     |     A     |     D     |
|-----------|-----------|-----------|

我想创建一个新列来回答以下问题:“任何列中是否都存在值'D'?”

因此,最终数据如下所示:

|-----------|-----------|-----------|-----------|
| Feature 1 | Feature 2 | Feature 3 | Feature 4 |
|-----------|-----------|-----------|-----------|
|     A     |     B     |     D     |    True   |
|     A     |     A     |     B     |   False   |
|     A     |     D     |     A     |    True   |
|     A     |     B     |     A     |   False   |
|     A     |     A     |     A     |   False   |
|     A     |     A     |     D     |    True   |
|-----------|-----------|-----------|-----------|

我尝试使用df.isin()方法,但是仍然无法做到这一点。

你们知道怎么做吗?

试试这种方法:

df[df=='D'].any(1)

您只需将dfD进行比较,然后通过any一个检查至少一个True

df['Feature 4'] = (df == 'D').any(axis=1)
print (df)
  Feature 1 Feature 2 Feature 3 Feature 4
0         A         B         D      True
1         A         A         B     False
2         A         D         A      True
3         A         B         A     False
4         A         A         A     False
5         A         A         D      True

或比较使用eq

df['Feature 4'] = df.eq('D').any(axis=1)
print (df)
  Feature 1 Feature 2 Feature 3 Feature 4
0         A         B         D      True
1         A         A         B     False
2         A         D         A      True
3         A         B         A     False
4         A         A         A     False
5         A         A         D      True

print (df.eq('D'))
  Feature 1 Feature 2 Feature 3
0     False     False      True
1     False     False     False
2     False      True     False
3     False     False     False
4     False     False     False
5     False     False      True

为了帮助具有相同挑战的任何人,我提出了另一种选择。 您可以将numpy where函数与或一起使用,以检查所有列。

请参见下面的样机:

import numpy as np
import pandas as pd

a = [
['A', 'B', 'D'], 
['A','A', 'B'],
['A','D', 'A'],
['A','B', 'A'],
['A','A', 'A'],
['A','A', 'D']
]
df = pd.DataFrame(a, columns=['Feature 1', 'Feature 2', 'Feature 3'])
df['Feature 4'] = np.where((df['Feature 1']=='D') | (df['Feature 2']=='D') |(df['Feature 3']=='D') , True, False)
df

结果如下:

+---+-----------+-----------+-----------+-----------+
|   | Feature 1 | Feature 2 | Feature 3 | Feature 4 |
+---+-----------+-----------+-----------+-----------+
| 0 | A         | B         | D         | True      |
+---+-----------+-----------+-----------+-----------+
| 1 | A         | A         | B         | False     |
+---+-----------+-----------+-----------+-----------+
| 2 | A         | D         | A         | True      |
+---+-----------+-----------+-----------+-----------+
| 3 | A         | B         | A         | False     |
+---+-----------+-----------+-----------+-----------+
| 4 | A         | A         | A         | False     |
+---+-----------+-----------+-----------+-----------+
| 5 | A         | A         | D         | True      |
+---+-----------+-----------+-----------+-----------+

暂无
暂无

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

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