如何使用 itertools 使用 pandas 获取唯一的行项目?

How to use itertools for getting unique row items using pandas?

我有一个如下所示的数据框

ID,Region,Supplier,year,output
1,ANZ,AB,2021,1
2,ANZ,ABC,2022,1
3,ANZ,ABC,2022,1
4,ANZ,ABE,2021,0
5,ANZ,ABE,2021,1
6,ANZ,ABQ,2021,1
7,ANZ,ABW,2021,1
8,AUS,ABO,2020,1
9,KOREA,ABR,2019,0

我正在尝试生成 regionsupplier 值的唯一组合。我想通过 zip_longest.

而不是 groupby

所以,我尝试了以下方法

for i,j in itertools.zip_longest(region_values,supplier_values,fillvalue="ANZ"):
    print(i,j)

但是上面的结果导致 i and j.

的条目不正确

我想从特定行中获取每个唯一组合。我不希望 multiply/generate 数据中没有的新组合

目前,这会导致输出不正确,如下所示

ANZ AB
AUS ABC  #incorrect to generating new combinations like this
KOREA ABE #incorrect to generating new combinations like this
ANZ ABQ
ANZ ABW
ANZ ABO
ANZ ABR

我希望我的输出如下所示

ANZ AB
ANZ ABC
ANZ ABE
ANZ ABQ
ANZ ABW
AUS ABO
KOREA ABR 

我使用 zip_longest 因为在此之后,我想使用 zip 对象的输出来使用 2 列过滤数据帧

看来你想要一套:

set(zip(df['Region'], df['Supplier']))

输出:

{('ANZ', 'AB'),
 ('ANZ', 'ABC'),
 ('ANZ', 'ABE'),
 ('ANZ', 'ABQ'),
 ('ANZ', 'ABW'),
 ('AUS', 'ABO'),
 ('KOREA', 'ABR')}

对于迭代:

for r, s in set(zip(df['Region'], df['Supplier'])):
    pass

如果顺序很重要,请使用 dict.from_keys:

for a,b in dict.fromkeys(zip(df['Region'], df['Supplier'])).keys():
    print(a,b)

如果排序很重要,则需要同时删除两列的重复项,因此 unique 需要 drop_duplicates:

column_name = "Region"
col_name = "Supplier"
df = data.drop_duplicates([column_name, col_name])    
        
for i,j in zip(df[column_name],df[col_name]):
    print(i,j)
    ANZ AB
    ANZ ABC
    ANZ ABE
    ANZ ABQ
    ANZ ABW
    AUS ABO
    KOREA ABR