猿问

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

我收到了一个.csv文件,有2列(简化)。一列包含数据,另一列包含文件名。不幸的是,此文件名可能不正确,我必须通过比较日期和文件名来确定。


我想要什么

# initial situation

d = {

    '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 result

print(pd.Series([True, False, True]))

# 0     True

# 1    False

# 2     True

# dtype: bool

有了想要的结果,我可以计算出我有多少个错误的文件,并过滤DataFrame以仅包含有效的条目。


我尝试过什么

通常,比较的工作方式如下:


# True / False

df["call_date"] == df["filename"]

# filter DF

df[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”中找到的字符串开头?


繁华开满天机
浏览 162回答 2
2回答

慕码人8056858

将列表理解与 - 输出为列表,可用于通过布尔索引进行筛选startswithm = [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     True1    False2     Truedtype: bool

FFIVE

执行:df['is_correct'] = df.apply(lambda x: x['filename'].startswith(x['call_date']),axis=1)然后,总结一下你有多少正确:df['is_correct'].sum()
随时随地看视频慕课网APP

相关分类

Python
我要回答