我有一个大的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],但是失败了。因为它将[0:4]解释为索引选择器,所以它仅使newcol = sqldate的前四行,其余的行成为Nan。
对于使用更优雅,矢量化的方法在数据帧上使用操纵的字符串值有何建议?
您可以用来Series.str
在列上使用字符串函数。因此df['sqldate'].str[0:4]
将提取前四个字符(如果存在),然后检查以下两列(pdf和sqldate)的前四个字符是否相同,并将结果放入'newcol'中:
df['newcol'] = df['sqldate'].str[0:4]==df['pdf'].str[0:4]
查看有关字符串函数的更多信息:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句