我收到了一个.csv文件,有2列(简化)。一列包含数据,另一列包含文件名。不幸的是,此文件名可能不正确,我必须通过比较日期和文件名来确定。我想要什么# initial situationd = { 'call_date': ["20200102-09", "20191203-04", "20200103-10"], 'filename': ["20200102-09xx.wav", "20200102-10yy.wav", "20200103-10zz.wav"]}df = pd.DataFrame(data=d)print(df)# call_date filename# 0 20200102-09 20200102-09xx.wav# 1 20191203-04 20200102-10yy.wav# 2 20200103-10 20200103-10zz.wav...# desired resultprint(pd.Series([True, False, True]))# 0 True# 1 False# 2 True# dtype: bool有了想要的结果,我可以计算出我有多少个错误的文件,并过滤DataFrame以仅包含有效的条目。我尝试过什么通常,比较的工作方式如下:# True / Falsedf["call_date"] == df["filename"]# filter DFdf[df["call_date"] == df["filename"]]熊猫有一只熊猫。系列.str.startswith函数,但是它仅适用于单个字符串,而不适用于诸如以下的内容:df["filename"].str.startswith(df["call_date"])# 0 NaN# 1 NaN# 2 NaN# Name: filename, dtype: float64问题如何进行行间比较,比较列“文件名”中的元素是否以列“call_date”中找到的字符串开头?
2 回答

慕码人8056858
TA贡献1803条经验 获得超6个赞
将列表理解与 - 输出为列表,可用于通过布尔索引进行筛选startswith
m = [x.startswith(y) for x, y in df[['filename','call_date']].values]
艺术
m = [x.startswith(y) for x, y in zip(df['filename'], df['call_date'])]
print (m)
[True, False, True]
另一种解决方案,但速度较慢:
m = df.apply(lambda x: x['filename'].startswith(x['call_date']), axis=1)
print (m)
0 True
1 False
2 True
dtype: bool

FFIVE
TA贡献1797条经验 获得超6个赞
执行:
df['is_correct'] = df.apply(lambda x: x['filename'].startswith(x['call_date']),axis=1)
然后,总结一下你有多少正确:
df['is_correct'].sum()
添加回答
举报
0/150
提交
取消