首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于条件的串联柱的有效方法

基于条件的串联柱的有效方法
EN

Stack Overflow用户
提问于 2020-03-19 01:13:42
回答 2查看 77关注 0票数 0

MRE:

代码语言:javascript
复制
dictionary = {'2018-10': 50, '2018-11': 76}
df = pd.DataFrame({
    "date":["2018-10", "2018-10", "2018-10", "2018-11","2018-11"]
})

看起来就像(我有几毫安行和多行):

代码语言:javascript
复制
      date
0   2018-10
1   2018-10
2   2018-10
3   2018-11
4   2018-11

根据日期而定,字典中有与其相关联的编号。我希望将相关的数字连接到date列中(使用矢量化)。

所以我想要的dataframe看起来如下:

代码语言:javascript
复制
         date
0   2018-10 (50)
1   2018-10 (50)
2   2018-10 (50)
3   2018-11 (76)
4   2018-11 (76)

我的日期列有数据类型字符串。

当前解决方案:I可以使用apply lambda:

代码语言:javascript
复制
 df["date"] = df["date"].apply(lambda row:row + f" ({dictionary[row]})")

但是,我想知道是否有任何方法可以将其矢量化,因为我有数百万行,并且不想逐行进行。

编辑:现在我想到了,我不认为有一种向量化的方法,因为根据日期,我需要连接不同的数字。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-19 01:51:39

pd.Series.map可以使用一个dict作为映射,可以添加字符串和字符串列,因此它实际上就像

代码语言:javascript
复制
df['date'] = df['date'] + ' (' + df['date'].map(dictionary).astype(str) + ')'
票数 1
EN

Stack Overflow用户

发布于 2020-03-19 01:38:47

所以我并不是百分之百地认为这是最快的方法,但这是相当简单的。

代码语言:javascript
复制
data = {'2018-10': 50, '2018-11': 76}
df = pd.DataFrame({
    "date":["2018-10", "2018-10", "2018-10", "2018-11","2018-11"]
})
df["data"] = df.date.apply(lambda x: data[x])

产生的结果:

代码语言:javascript
复制
      date  data
0  2018-10    50
1  2018-10    50
2  2018-10    50
3  2018-11    76
4  2018-11    76

对于df.date.apply(lambda x: data[x]),您也可以使用

代码语言:javascript
复制
df.apply(lambda x: data[x['date']],axis=1)

我相信这也会有类似的效果,但它的可读性很低。

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

https://stackoverflow.com/questions/60749614

复制
相关文章

相似问题

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