【问题标题】:get all the non nan values of a pandas column获取 pandas 列的所有非 nan 值
【发布时间】:2021-12-13 18:54:56
【问题描述】:

想象一下我有一个 DF:

df = pd.DataFrame({'country':['UK','UK','UK','UK','US','US','US','US','US','US'],
                         'result':[np.nan,'A','B',np.nan,np.nan,'C','D',np.nan,4,np.nan]})

我想获取给定国家/地区与 np.nan 不同的所有结果列值。

我不明白为什么这不起作用:

country= 'UK'
mask_country = df['country'] == country
mask_result   = df['result'].notnull()

# does not work
df.loc[mask_country & mask_result,[country]]
# does not work:
df.loc[mask_country & mask_result,country]

有什么想法吗?

预期结果 ['A','B'] 代表英国 和 ['C','D',4] 用于美国

编辑: 实际上,另一种过滤方式是“给我所有不是 str 的值,而不是 '' 或空格。

【问题讨论】:

  • df.loc[df['country'].eq('UK') & df['result'].notnull(), 'result']?
  • t = df[df['country'] == 'UK']['result'].dropna().to_list() --> ['A', 'B']

标签: pandas filter nan


【解决方案1】:

您可以使用dropnagroupby+agg 将所有国家/地区的所有非空值作为一个系列一次获取

s = (df.dropna(subset=['result'])
       .groupby('country')['result']
       .agg(list)
     )

输出:

>>> s
country
UK       [A, B]
US    [C, D, 4]

>>> s['UK']
['A', 'B']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 2021-03-08
    • 2021-12-31
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    相关资源
    最近更新 更多