Python 根据条件确定混凝土柱的有效方法
MRE: 这看起来像(我有数百万行和多行): 根据日期的不同,字典中有与其关联的编号。我想将关联的数字连接到日期列中(使用矢量化) 因此,我所需的数据帧如下所示:Python 根据条件确定混凝土柱的有效方法,python,pandas,Python,Pandas,MRE: 这看起来像(我有数百万行和多行): 根据日期的不同,字典中有与其关联的编号。我想将关联的数字连接到日期列中(使用矢量化) 因此,我所需的数据帧如下所示: date 0 2018-10 1 2018-10 2 2018-10 3 2018-11 4 2018-11 “我的日期”列具有数据类型字符串 当前解决方案: 我可以申请lambda: date 0 2018-10 (50) 1 2018-10 (50) 2 2018-1
date
0 2018-10
1 2018-10
2 2018-10
3 2018-11
4 2018-11
“我的日期”列具有数据类型字符串
当前解决方案:
我可以申请lambda:
date
0 2018-10 (50)
1 2018-10 (50)
2 2018-10 (50)
3 2018-11 (76)
4 2018-11 (76)
然而,我想知道是否有任何方法来做它矢量化的方式,因为我有数百万行,不想去逐行
编辑:
现在我想起来了,我不认为有矢量化的方法,因为根据日期,我需要计算不同的数字。所以我不是100%认为这是最快的方法,但它相当简单
df["date"] = df["date"].apply(lambda row:row + f" ({dictionary[row]})")
这将产生:
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])
除了df.date.apply(lambda x:data[x])之外,您还可以使用
date data
0 2018-10 50
1 2018-10 50
2 2018-10 50
3 2018-11 76
4 2018-11 76
我认为它的性能类似,但在我看来可读性较差。可以使用dict
作为映射,并且可以添加字符串和字符串列,因此实际上非常简单
df.apply(lambda x: data[x['date']],axis=1)
确实有pandas.Series.apply
和pandas.Series.map
方法。也许这些就是你要找的?我认为您的最后一段代码实际上是工作代码。您试过了吗?最后一个代码正在运行,但我想知道是否有使用矢量化然后合并两列的方法?您不需要合并任何内容,因为您正在将结果分配给列data
。我希望日期列中包含数字。df[“date”]=df.date.apply(lambda x:x+“({})”格式(数据[x]))
但是为什么呢?这就是我在上面所做的,但是我想使用矢量化。谢谢,我刚刚意识到没有一种方法可以用矢量化的方式来实现这一点。这将比应用更有效。为什么这比应用更有效?
df.apply(lambda x: data[x['date']],axis=1)
df['date'] = df['date'] + ' (' + df['date'].map(dictionary).astype(str) + ')'