Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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,我有一个非常大的数据集(20GB+),我需要从a列中选择所有不同的值,其中B列中至少有两个其他不同的值用于a列中的每个不同值 对于以下数据帧: | A | B | |---|---| | x | 1 | | x | 2 | | y | 1 | | y | 1 | 应该只返回x,因为它在列B上有两个不同的值,而y只有一个不同的值 下面的代码实现了这一点,但由于数据集非常大,这需要很长的时间(以小时为单位): def get_values(list_of_distinct_values, data

我有一个非常大的数据集(20GB+),我需要从a列中选择所有不同的值,其中B列中至少有两个其他不同的值用于a列中的每个不同值

对于以下数据帧:

| A | B |
|---|---|
| x | 1 |
| x | 2 |
| y | 1 |
| y | 1 |
应该只返回x,因为它在列B上有两个不同的值,而y只有一个不同的值

下面的代码实现了这一点,但由于数据集非常大,这需要很长的时间(以小时为单位):

def get_values(list_of_distinct_values, dataframe):
    valid_values = []
    for value in list_of_distinct_values:
        value_df = dataframe.loc[dataframe['A'] == value]
        if len(value_df.groupby('B')) > 1:
            valid_values.append(value)
    return valid_values

有人能提出一种更快的方法吗?

我想你可以用数据帧的方法
drop\u duplicates()
来解决你的问题。您需要使用参数
子集
保留
(删除所有重复的行):


我不知道这是否会更快,但值得一试,因为它不涉及迭代:
valid_values=df.groupby('a').agg({'B':'nunique'))
valid_values=valid_values[valid_values['B']>=2]
@Jacob-谢谢。它确实起作用了,而且速度快得多。
import pandas as pd
df = pd.DataFrame({
    'A': ["x", "x", "y", "y"],
    'B': [1, 2, 1, 1],
})
df.drop_duplicates(subset=['A', 'B'], keep=False).drop_duplicates(subset=['A'])['A']