【问题标题】:Retrieving only one element of a tuple when the tuple is the value of a dictionary当元组是字典的值时仅检索元组的一个元素
【发布时间】:2021-05-15 04:08:35
【问题描述】:

我正在尝试将我的 df 列映射到字典,其中字典包含元组作为值。我希望能够只返回输出列中元组的第一个值。有没有办法做到这一点?

情况:

d = {'key1': (1, 2, 3)}
df['lookup_column'] = 'key1'
df['return_column'] = df['lookup_column'].map(d)

输出:

df['return_column'] = (1, 2, 3)

添加这个会返回错误:

df['return_column'] = df['return_column'][0]

运行它也会返回错误:

df['return_column'] = df['lookup_column'].map(d[0])

期望的结果:

df['return_column'] = 1

谢谢!

【问题讨论】:

    标签: pandas dataframe dictionary tuples


    【解决方案1】:

    str 用作Iterable 的第一个元素,此处为tuple - 如果不匹配则返回NaN

    df['return_column'] = df['return_column'].str[0]
    

    大家一起:

    df = pd.DataFrame({'lookup_column':['key1','key2']})
    
    d = {'key1': (1, 2, 3)}
    df['return_column1'] = df['lookup_column'].map(d)
    df['return_column2'] = df['lookup_column'].map(d).str[0]
    

    如果不匹配,则使用dict.get 作为默认值的第二种选择,这里是输出元组,因此可以使用元组(np.nan,)

    df['return_column4'] = df['lookup_column'].map(lambda x: d.get(x, (np.nan,)))
    df['return_column5'] = df['lookup_column'].map(lambda x: d.get(x, (np.nan,))[0])
    print (df)
      lookup_column return_column1  return_column2 return_column4  return_column5
    0          key1      (1, 2, 3)             1.0      (1, 2, 3)             1.0
    1          key2            NaN             NaN         (nan,)             NaN
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-07
      • 1970-01-01
      • 2021-02-24
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      • 2013-03-21
      • 2021-09-21
      相关资源
      最近更新 更多