Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 从数据帧中选择具有两个级别(二进制变量)的列_Python 3.x_Pandas_Dataframe - Fatal编程技术网

Python 3.x 从数据帧中选择具有两个级别(二进制变量)的列

Python 3.x 从数据帧中选择具有两个级别(二进制变量)的列,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我正在尝试选择只有两个值[0,1]的数据字段。我的代码只适用于一列,但是当我尝试循环遍历多列时,它失败了 以下是示例数据集: df = pd.DataFrame({'a':np.random.randint(0,2, size = (10)), 'b':np.random.randint(0,2, size = (10)), 'c':np.random.randint(0,6, size = (10)),

我正在尝试选择只有两个值[0,1]的数据字段。我的代码只适用于一列,但是当我尝试循环遍历多列时,它失败了

以下是示例数据集:

df = pd.DataFrame({'a':np.random.randint(0,2, size = (10)),
                    'b':np.random.randint(0,2, size = (10)),
                    'c':np.random.randint(0,6, size = (10)),
                   'd': ['x', 'y']*5
                  })
df
数据如下所示:

df.to_dict()
{'a': {0: 1, 1: 1, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 1, 8: 0, 9: 1},
 'b': {0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 1, 6: 1, 7: 1, 8: 0, 9: 1},
 'c': {0: 1, 1: 1, 2: 2, 3: 2, 4: 5, 5: 2, 6: 2, 7: 0, 8: 4, 9: 3},
 'd': {0: 'x',
  1: 'y',
  2: 'x',
  3: 'y',
  4: 'x',
  5: 'y',
  6: 'x',
  7: 'y',
  8: 'x',
  9: 'y'}}
应选择列“a”和“b”。 下面这行是真的,这就是我想要的

list(set(df[mylist[0]])) == [0,1]
为什么运行此操作时会出现密钥错误:

mylist = list(df.columns)

for i in mylist:
    if list(set(df[mylist.index(i)])) == [0,1]:
        print(i)
关键错误:0

我试图输出满足IF条件的列名列表

df = pd.DataFrame({'a':np.random.randint(0,2, size = (10)),
                    'b':np.random.randint(0,2, size = (10)),
                    'c':np.random.randint(0,6, size = (10)),
                   'd': ['x', 'y']*5
                  })
df

使用++:

您还可以使用:

df[df.columns[df.isin([0,1]).all()]]
或:

输出:

   a  b
0  0  1
1  0  1
2  0  1
3  0  1
4  1  1
5  0  1
6  1  0
7  1  1
8  0  1
9  0  0
df[df.isin([0,1]).all(axis=1)]
获取列:

[*df.loc[:,df.isin([0,1]).all()].columns]
#['a', 'b']
要按行选择,只需执行以下操作:

   a  b
0  0  1
1  0  1
2  0  1
3  0  1
4  1  1
5  0  1
6  1  0
7  1  1
8  0  1
9  0  0
df[df.isin([0,1]).all(axis=1)]
你为什么不工作


您可以使用转置和求和,如下所示

df=pd.DataFrame({'a':{0:1,1:1,2:0,3:0,4:0,5:0,6:0,7:1,8:0,9:1},
‘b’:{0:0,1:0,2:0,3:0,4:0,5:1,6:1,7:1,8:0,9:1},
‘c’:{0:1,1:1,2:2,3:2,4:5,5:2,6:2,7:0,8:4,9:3},
'd':{0:'x',
1:‘y’,
2:'x',
3:‘y’,
4:'x',
5:‘y’,
6:'x',
7:‘y’,
8:'x',
9:'y'}})
##解决方案
df.T[df.sum()=(df==1.sum()].T

我收到以下错误:IndexingError:作为索引器提供的不可对齐的布尔序列(布尔序列的索引和索引对象的索引不匹配——对于第一个选项,第三个选项似乎返回我想要的列。谢谢。但是是什么导致我的原始代码失败?是的,您的代码工作正常,但是我想了解是什么导致我的原始代码失败。有什么想法吗?谢谢。我已经更新了解决方案,以了解w。)为什么会出现错误。
df[df.isin([0,1]).all(axis=1)]
print(mylist)
#['a', 'b', 'c', 'd']
mylist.index('a')
#returns 0
df[0]
#key error 0 because 0 not in list of columnas a,b,c,d...