假设我们有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)
我想做的是查看partner
中具有NaN
中的commodity
值的值列表,但是我不想拥有相同的{{1} }列出两次。
所以我的首选结果如下:
partner
而不是:
commodity_nan_partners=
Afghanistan
Canada
USA
答案 0 :(得分:3)
您可以使用NaN
查找isnull
值,然后使用unique
或set
获得唯一值:
>>> pd.Series(df1.loc[df1.commodity.isnull(),'partner'].unique())
0 Afghanistan
1 Canada
2 USA
dtype: object
# or
>>> pd.Series(list(set(df1.loc[df1.commodity.isnull(),'partner'])))
0 Canada
1 Afghanistan
2 USA
dtype: object
答案 1 :(得分:3)
loc
+ isnull
+ drop_duplicates
您可以过滤您的系列,然后删除重复项:
res = df1.loc[df1['commodity'].isnull(), 'partner'].drop_duplicates()
print(res)
0 Afghanistan
4 Canada
7 USA
Name: partner, dtype: object
答案 2 :(得分:2)
第1步
筛选出仅保留有效字符串:
v = df1.loc[df1.commodity.isna(), 'partner']
或者,
v = df1.partner[df1.commodity.isna()]
print(v)
0 Afghanistan
3 Afghanistan
4 Canada
6 Canada
7 USA
Name: partner, dtype: object
第2步
删除重复项。
如果要收藏,
ingredients.unique()
array(['Afghanistan', 'Canada', 'USA'], dtype=object)
或者,
set(ingredients)
{'Afghanistan', 'Canada', 'USA'}
如果您想要一个系列,
ser = ingredients.drop_duplicates().reset_index(drop=True)
0 Afghanistan
1 Canada
2 USA
Name: partner, dtype: object
如果您想要一个DataFrame,
df = ser.to_frame()
答案 3 :(得分:2)
可以使用dropna
进行检查,只需在此处提供其他想法即可。
set(df1.partner.tolist())-set(df1.dropna().partner.tolist())
Out[94]: {'Afghanistan', 'Canada', 'USA'}
答案 4 :(得分:0)
还有另一种选择:
switch
使用Permissions
+ >>> df1[df1.isnull().any(axis=1)]['partner'].drop_duplicates()
0 Afghanistan
4 Canada
7 USA
Name: partner, dtype: object
loc