首页 > 解决方案 > 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')

标签: pythonpandasdataframe

解决方案


您可以为每一列创建一个新的系列数据框并使用它进行比较。

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,:]

希望这能解决问题。


推荐阅读