如何使用 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
我正在尝试生成 region
和 supplier
值的唯一组合。我想通过 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
我有一个如下所示的数据框
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
我正在尝试生成 region
和 supplier
值的唯一组合。我想通过 zip_longest
.
所以,我尝试了以下方法
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