首页 > 解决方案 > 当元组是字典的值时仅检索元组的一个元素

问题描述

我正在尝试用字典映射我的 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

谢谢!

标签: pandasdataframedictionarytuples

解决方案


用于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

推荐阅读