Python:如何找到列中的哪些值在另一个特定列(dataframes)中具有NaN值

Python:如何找到列中的哪些值在另一个特定列(dataframes)中具有NaN值,python,pandas,dataframe,multiple-columns,nan,Python,Pandas,Dataframe,Multiple Columns,Nan,假设我们的df1如下所示: x1 = [{'partner': "Afghanistan", 'commodity': NaN}, {'partner': "Zambia", 'commodity': 2}, {'partner': "Germany", 'commodity': 2}, {'partner': "Afghanistan", 'commodity': NaN}, {'partner': "Canada",

假设我们的df1如下所示:

x1 = [{'partner': "Afghanistan", 'commodity': NaN}, 
      {'partner': "Zambia",      'commodity': 2}, 
      {'partner': "Germany",     'commodity': 2},
      {'partner': "Afghanistan", 'commodity': NaN},
      {'partner': "Canada",      'commodity': NaN},
      {'partner': "Italy",       'commodity': 3},
      {'partner': "Canada",      'commodity': NaN},
      {'partner': "USA",         'commodity': NaN}]

df1 = pd.DataFrame(x1)
commodity_nan_partners=
Afghanistan
Canada
USA
我想做的是查看partner中的值列表,这些值在商品中具有NaN值,但我不想让同一个partner列出两次

因此,我的首选结果如下所示:

x1 = [{'partner': "Afghanistan", 'commodity': NaN}, 
      {'partner': "Zambia",      'commodity': 2}, 
      {'partner': "Germany",     'commodity': 2},
      {'partner': "Afghanistan", 'commodity': NaN},
      {'partner': "Canada",      'commodity': NaN},
      {'partner': "Italy",       'commodity': 3},
      {'partner': "Canada",      'commodity': NaN},
      {'partner': "USA",         'commodity': NaN}]

df1 = pd.DataFrame(x1)
commodity_nan_partners=
Afghanistan
Canada
USA
而不是:

Afghanistan
Afghanistan
Canada
Canada
USA
您可以使用isnull查找NaN值,然后使用unique或set获取唯一值:

您可以使用isnull查找NaN值,然后使用unique或set获取唯一值:

+ + 您可以筛选序列,然后删除重复项:

res = df1.loc[df1['commodity'].isnull(), 'partner'].drop_duplicates()

print(res)

0    Afghanistan
4         Canada
7            USA
Name: partner, dtype: object
+ + 您可以筛选序列,然后删除重复项:

res = df1.loc[df1['commodity'].isnull(), 'partner'].drop_duplicates()

print(res)

0    Afghanistan
4         Canada
7            USA
Name: partner, dtype: object
第一步 过滤掉以仅保留有效字符串:

v = df1.loc[df1.commodity.isna(), 'partner']
或者

步骤2 删除重复项

如果你想收藏

ingredients.unique()
array(['Afghanistan', 'Canada', 'USA'], dtype=object)
或者

如果你想拍连续剧

ser = ingredients.drop_duplicates().reset_index(drop=True)

0    Afghanistan
1         Canada
2            USA
Name: partner, dtype: object
如果你想要一个数据帧

df = ser.to_frame()
第一步 过滤掉以仅保留有效字符串:

v = df1.loc[df1.commodity.isna(), 'partner']
或者

步骤2 删除重复项

如果你想收藏

ingredients.unique()
array(['Afghanistan', 'Canada', 'USA'], dtype=object)
或者

如果你想拍连续剧

ser = ingredients.drop_duplicates().reset_index(drop=True)

0    Afghanistan
1         Canada
2            USA
Name: partner, dtype: object
如果你想要一个数据帧

df = ser.to_frame()
请咨询dropna,在这里提供一个不同的想法

set(df1.partner.tolist())-set(df1.dropna().partner.tolist())
Out[94]: {'Afghanistan', 'Canada', 'USA'}
请咨询dropna,在这里提供一个不同的想法

set(df1.partner.tolist())-set(df1.dropna().partner.tolist())
Out[94]: {'Afghanistan', 'Canada', 'USA'}

只是另一种选择:

>>> df1[df1.isnull().any(axis=1)]['partner'].drop_duplicates()
0    Afghanistan
4         Canada
7            USA
Name: partner, dtype: object
使用loc+np.isnan


只是另一种选择:

>>> df1[df1.isnull().any(axis=1)]['partner'].drop_duplicates()
0    Afghanistan
4         Canada
7            USA
Name: partner, dtype: object
使用loc+np.isnan