将 pandas 数据帧转换为布尔值

Converting a pandas dataframe into bool values

我正在尝试编写一个代码来检查 pandas 系列的 Unix 列中是否有任何重复项。它应该 return 对于 DataSet Truebool 值,因为 130 重复两次并且 False 对于 DataSet2 .我怎样才能得到下面的预期输出?

import pandas as pd

DataSet = pd.DataFrame({'Unix':[130, 140, 150, 130],
                  'Value':[11,2,3,4]})
DataSet2 =  pd.DataFrame({'Unix':[130, 140, 150, 160],
                  'Value':[11,2,3,4]})
 
print(DataSet.duplicated(subset=['Unix']).bool())
print(DataSet2.duplicated(subset=['Unix']).bool())

预期输出:

True 
False

如果作为参数传递给它的 collection 中有任何真实值(相反,.all() returns True 仅当给定 collection 中的所有值都为真时):

In [5]: DataSet.duplicated(subset=['Unix']).any()
Out[5]: True

In [6]: DataSet2.duplicated(subset=['Unix']).any()
Out[6]: True

但是,我认为您可能不小心复制了 DataSet2 的错误数据,因为它与 DataSet1 相同,False 的答案没有意义。

请注意,您也可以使用 .is_unique,这更适合您的 use-case:

In [7]: DataSet.Unix.is_unique
Out[7]: False

In [8]: DataSet2.Unix.is_unique
Out[8]: False

供参考,.any().all() 函数是逻辑上等同于分别对 a 中的所有项目使用 orand 的便捷方法collection.

使用.any()代替.bool():

print(DataSet.duplicated(subset=['Unix']).any())
print(DataSet2.duplicated(subset=['Unix']).any())

输出:

True
True

(请注意,问题中给出的 DataSetDataSet1 是相同的,因此两者都是 True。我认为这只是一个错字,并不反映您的实际数据.)

你可以通过以下代码得到DataSet True

print(DataSet["Unix"].duplicated().sum() > 0)

我不知道为什么 DataSet2 是 False