为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas行检查元素字符串是否以其他元素的字符串开头(2个不同的列)

Pandas行检查元素字符串是否以其他元素的字符串开头(2个不同的列)

繁华开满天机 2022-09-20 15:27:38
我收到了一个.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


查看完整回答
反对 回复 2022-09-20
?
FFIVE

TA贡献1797条经验 获得超6个赞

执行:

df['is_correct'] = df.apply(lambda x: x['filename'].startswith(x['call_date']),axis=1)

然后,总结一下你有多少正确:

df['is_correct'].sum()


查看完整回答
反对 回复 2022-09-20
  • 2 回答
  • 0 关注
  • 161 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号