首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在熊猫单元格中的列表中查找一个数字,并从第二个DF返回相应的字符串值。

在熊猫单元格中的列表中查找一个数字,并从第二个DF返回相应的字符串值。
EN

Data Science用户
提问于 2019-09-29 20:36:30
回答 1查看 363关注 0票数 0

(为了清晰起见,我在labels_df中编辑了第一个列名)

我有两个DataFrames,train_df和labels_df。train_df具有映射到labels_df中属性名称的整数。我希望查找给定train_df单元中的每个数字,并在相邻单元中返回labels_df中相应的属性名。

我试过了下面的各种功能,但恐怕我有点走样了:

代码语言:javascript
复制
def my_mapping(df1, df2):
    tags = df1['attribute_ids']
    for i in tags.iteritems():
        df1['new_col'] = df2.iloc[i]
    return df1

数据最初来自两个csv文件:

train.csv

labels.csv

我从丹尼那里试过这个

代码语言:javascript
复制
sample_train_df['attribute_ids'].apply(lambda x: [sample_labels_df[sample_labels_df['attribute_name'] == i]
                                              ['attribute_id_num'] for i in x])

*请注意-由于原DFs的运行时间,我正在每个DF的样本上运行上述代码。返回:

EN

回答 1

Data Science用户

发布于 2019-10-03 12:48:36

我创造了我自己的数据。

train.csv

代码语言:javascript
复制
id,attrib
1,1 2 3
2,3 4 5
3,2 3 5
4,1 1 1

labels.csv

代码语言:javascript
复制
attrib_id,attrib_name
1,a
2,b
3,c
4,d
5,e

读取csv文件并创建df1和df2

在那之后

代码语言:javascript
复制
def get_name(x):
    result = []
    for t in x.split(' '):
        result.append(df2[df2['attrib_id']==int(t)]['attrib_name'].values[0])
    return result

df1['attrib'] = df1['attrib'].apply(lambda x: get_name(x))

这将导致df1看起来像

我想当你提到“丹尼”的时候,你也在做同样的事情。这里唯一重要的是将字符串转换为整数。

票数 0
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/61012

复制
相关文章

相似问题

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