我有一个大型DataFrame,类似于
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']并尝试从日期中删除左边的四个字符。像df [' newcol'] = df [' sqldate'] [0:4]但是失败了。它只生成newcol = sqldate的前四行,以及其余的行Nan,因为它将[0:4]解释为索引选择器。
有关更优雅,矢量化方式在数据框上使用受控字符串值的任何建议吗?
答案 0 :(得分:7)
您可以使用Series.str
在列上使用字符串函数。因此df['sqldate'].str[0:4]
将提取前4个字符(如果存在),并且以下检查两列(pdf和sqldate)的前四个字符是否相同,并将结果放入'newcol':< / p>
df['newcol'] = df['sqldate'].str[0:4]==df['pdf'].str[0:4]
详细了解字符串函数: