Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.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 按元素比较或区分两列_Python_Pandas - Fatal编程技术网

Python 按元素比较或区分两列

Python 按元素比较或区分两列,python,pandas,Python,Pandas,我不熟悉熊猫(但不熟悉数据科学和Python)。这个问题不是关于如何解决这个具体问题,而是如何以熊猫的方式处理这样的问题 请随意改进这个问题的标题。因为我不确定这里的正确术语是什么 这是我的MWE #!/usr/bin/env python3 import pandas as pd data = {'A': [1, 2, 3, 3, 1, 4], 'B': ['One', 'Two', 'Three', 'Three', 'Eins', 'Four']} df = pd.D

我不熟悉熊猫(但不熟悉数据科学和Python)。这个问题不是关于如何解决这个具体问题,而是如何以熊猫的方式处理这样的问题

请随意改进这个问题的标题。因为我不确定这里的正确术语是什么

这是我的MWE

#!/usr/bin/env python3

import pandas as pd

data = {'A': [1, 2, 3, 3, 1, 4],
        'B': ['One', 'Two', 'Three', 'Three', 'Eins', 'Four']}

df = pd.DataFrame(data)

print(df)
导致

   A      B
0  1    One
1  2    Two
2  3  Three
3  3  Three
4  1   Eins
5  4   Four
我的假设是,当
A
列中的值为
1
时,
B
列中的值始终为
1
。等等

我想证明这个假设

第二,我还假设,如果我的第一个假设不正确,这不是一个错误,但有充分的(人为)原因。e、 g.参见行索引
4
,其中
A
-值与
Eins
(而不是
One
)相关,在
B
列中

因此,我还需要看到和探索我的假设不正确的情况

问题更新: 这些数据只是一个例子。在现实世界中,我并没有意识到这两列是成对的。因为这样的解决方案在我的情况下不起作用

df.loc[df['A'] == 1, 'B']
我不知道A列中有多少个表达式和哪些表达式

我不知道如何使用
pandas
。熊猫专业人士将如何解决这个问题


我的方法是将纯Python代码与
list()
set()
和一些迭代一起使用

您可以通过以下方式过滤数据帧:

df.loc[df['A'] == 1, 'B']
这给出了B的值,其中A是1。接下来,您可以添加equals语句:

df.loc[df['A'] == 1, 'B'] == 'One'
这将产生一个布尔序列(在本例中为True,为False)。如果要检查是否全部为真,请添加:

all(df.loc[df['A'] == 1, 'B'] == 'One')
因为EIN,答案是错误的

编辑

如果要创建一个新列,说明是否满足条件(如果满足条件,则B的值始终相同),则可以执行以下操作:

df['C'] = df['A'].map(df.groupby('A')['B'].nunique() < 2)
df['C']=df['A'].map(df.groupby('A')['B'].nunique()<2)

这将导致一个布尔列。它通过将A中的值映射到括号中的列表来创建列C。在括号之间,它是a中值的groupby函数,并计算B中的唯一值。如果小于2,则它是唯一的。如果解决方案应测试每个
a
是否只有一个唯一值,并返回所有未在中使用计数唯一值的行,以重复每个组的聚合值,因此,可能的筛选行不是
1
,这意味着每个
A
有2个或多个唯一值:

df1 = df[df.groupby('A').B.transform('nunique').ne(1)]
print (df1)
   A     B
0  1   One
4  1  Eins


谢谢你的回答,这使我想到另一个我不知道的问题。我更新了我的问题。我不明白为什么我必须在
df['A']上使用
map()
。map函数用于字典格式。在本例中,groupby将生成一个系列,其中a的所有唯一值都作为索引,a的值作为布尔值。因此,如果groupby生成True或False,则映射将在一个数组中查找每个元素。我建议将df.groupby('A')['B'].nunique()<2部分保存为变量,并将其打印或查看变量资源管理器。我认为就是这样。但我有点自大,试着去理解。但我没有如果你能用更多的原子步骤来解释这个解决方案。。。这太好了。
if df1.empty:
    print ('My assumption is good')
else:
    print ('My assumption is wrong')
    print (df1)