我收到了一個.csv文件,有2列(簡化)。一列包含數(shù)據(jù),另一列包含文件名。不幸的是,此文件名可能不正確,我必須通過比較日期和文件名來確定。我想要什么# 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有了想要的結(jié)果,我可以計算出我有多少個錯誤的文件,并過濾DataFrame以僅包含有效的條目。我嘗試過什么通常,比較的工作方式如下:# True / Falsedf["call_date"] == df["filename"]# filter DFdf[df["call_date"] == df["filename"]]熊貓有一只熊貓。系列.str.startswith函數(shù),但是它僅適用于單個字符串,而不適用于諸如以下的內(nèi)容:df["filename"].str.startswith(df["call_date"])# 0 NaN# 1 NaN# 2 NaN# Name: filename, dtype: float64問題如何進(jìn)行行間比較,比較列“文件名”中的元素是否以列“call_date”中找到的字符串開頭?
2 回答

慕碼人8056858
TA貢獻(xiàn)1803條經(jīng)驗 獲得超6個贊
將列表理解與 - 輸出為列表,可用于通過布爾索引進(jìn)行篩選startswith
m = [x.startswith(y) for x, y in df[['filename','call_date']].values]
藝術(shù)
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貢獻(xiàn)1797條經(jīng)驗 獲得超6個贊
執(zhí)行:
df['is_correct'] = df.apply(lambda x: x['filename'].startswith(x['call_date']),axis=1)
然后,總結(jié)一下你有多少正確:
df['is_correct'].sum()
添加回答
舉報
0/150
提交
取消