首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:如何找到一个列中的哪个值在另一个特定列中有NaN值(dataframes)

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

Stack Overflow用户
提问于 2018-11-25 02:20:10
回答 5查看 220关注 0票数 1

假设我们有如下所示的df1

代码语言:javascript
复制
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中看到在commodity中有NaN值的值列表,但是我不想让相同的partner列出两次。

所以我想要的结果如下:

代码语言:javascript
复制
commodity_nan_partners=
Afghanistan
Canada
USA

而不是:

代码语言:javascript
复制
Afghanistan
Afghanistan
Canada
Canada
USA
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-11-25 02:25:44

loc + isnull + drop_duplicates

您可以筛选您的系列,然后删除重复项:

代码语言:javascript
复制
res = df1.loc[df1['commodity'].isnull(), 'partner'].drop_duplicates()

print(res)

0    Afghanistan
4         Canada
7            USA
Name: partner, dtype: object
票数 3
EN

Stack Overflow用户

发布于 2018-11-25 02:24:00

您可以使用NaN查找isnull值,然后使用uniqueset获取唯一值。

代码语言:javascript
复制
>>> 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
票数 3
EN

Stack Overflow用户

发布于 2018-11-25 02:34:59

步骤1

筛选出仅保留有效字符串:

代码语言:javascript
复制
v = df1.loc[df1.commodity.isna(), 'partner']

或,

代码语言:javascript
复制
v = df1.partner[df1.commodity.isna()]

代码语言:javascript
复制
print(v)
0    Afghanistan
3    Afghanistan
4         Canada
6         Canada
7            USA
Name: partner, dtype: object

步骤2

放下复印机。

如果你想要收藏,

代码语言:javascript
复制
ingredients.unique()
array(['Afghanistan', 'Canada', 'USA'], dtype=object)

或,

代码语言:javascript
复制
set(ingredients)
{'Afghanistan', 'Canada', 'USA'}

如果你想要系列赛,

代码语言:javascript
复制
ser = ingredients.drop_duplicates().reset_index(drop=True)

0    Afghanistan
1         Canada
2            USA
Name: partner, dtype: object

如果你想要DataFrame,

代码语言:javascript
复制
df = ser.to_frame()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53464129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档