我有一个大数据框

import pandas as pd

sqldate = pd.Series(["2014-0-1", "2015-10-10", "1990-23-2"])
pdf = pd.Series(["2014.pdf", "2015.pdf", "1999.pdf"])

df = pd.DataFrame({"sqldate":sqldate, "pdf": pdf})

我想创建一个布尔列,指示sqldate的年份是否与pdf名称的年份相同。
另一种情况是forloop很容易做到这一点,但我想将其矢量化以提高速度/清洁度。但我不知道怎么做。
我尝试过更简单的方法,甚至只是制作一个df['newcol']并尝试从date中去掉左边的四个字符。就像df['newcol']=df['sqldate'][0:4]但那失败了。它只会使newcol=sqldate的前四行变为nan,其余行变为nan,因为它将[0:4]解释为索引选择器。
对于在数据帧上使用操纵字符串值的更优雅、矢量化的方法,有什么建议吗?

最佳答案

您可以使用Series.str在列上使用字符串函数。因此df['sqldate'].str[0:4]将提取前4个字符(如果它们存在),下面检查两列(pdf和sqldate)的前4个字符是否相同,并将结果放入“newcol”:

df['newcol'] = df['sqldate'].str[0:4]==df['pdf'].str[0:4]

有关字符串函数的详细信息:
http://pandas.pydata.org/pandas-docs/stable/text.html

08-20 03:45