python - pandas:如何比较两列的浮点值
问题描述
我的问题是我不知道如何比较两个不同列中的数字(在同一个数据框中)。我想知道第二列中的数字是否至少是同一行中第一列的数字的两倍,并检查其余行是否相同并最终过滤它们,最后,有一个数据框,其中第二列中的所有数字至少是第一列中数字的两倍。所以,起初我这样做:
ac = pd.DataFrame.dropna(ab)
ad = pd.DataFrame.drop_duplicates(ac)
有这么多 NAN,我决定摆脱它们
ad["first column"] = ad["first column"].astype(float)
ad["second column"] = ad["second column"].astype(float)
即使没有这些行,我仍然会在以下内容中遇到相同的错误
然后我试图采取下一步:
boolean = []
def comp(number):
if ad.loc[:, "first column"] >= ad.loc[:, "second column"]*2:
boolean.append[True]
else:
boolean.append[False]
起初我把它写成一个 for 循环,但后来我把它改成了这个函数。所以,我可以使用 apply() 方法,但无论哪种方式我都会收到此错误:
ValueError: ('The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().', 'occurred at index Probe Set ID')
解决方案
您可以为每一列创建一个新的系列数据框并使用它进行比较。
df = pd.DataFrame(... all your data with columns...)
df = df.astype(float) #convert your whole df to a float
firstcol = df['firstcol']
secondcol = df['secondcol']*2
#a new series of True/False
booleanmatch = firstcol>secondcol
#remove rows that are false from df
df= df.loc[booleanmatch,:]
希望这能解决问题。
推荐阅读
- javascript - 正则表达式只允许特定数字
- selenium - 在 CircleCI 中将 Chrome 版本降级到 74
- jquery - 在每个循环中检测 jQuery 中的空数据
- android - 为什么我的图像没有显示在我测试它的设备上?
- azure - Microsoft Azure RA-GRS 存储 - 在 Microsoft 管理的故障转移到次要区域后,数据是否仍进行异地复制?
- php - 允许包中的原生 Laravel “魔术”方法
- reactjs - 将 Kendo React PDF 上传到 Firebase 存储
- android - Moodle 移动版 3.7.0
- vue.js - 如何选择 vue.config.js 位置?
- elasticsearch - 使用 ndjson 格式将文档索引到 elasticsearch