大熊猫:如何比较两列的浮点值

时间:2019-02-19 23:31:49

标签: python pandas dataframe

我的问题是我不知道如何比较两个不同列(在同一数据帧中)的数字。我想知道第二列中的数字是否至少比同一行中第一列的数字大两倍,并检查其余行是否相同,并最终对其进行过滤,最后,具有一个数据框,其中第二列中的所有数字至少比第一列中的数字大两倍。 所以,起初我是这样做的:

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

2 个答案:

答案 0 :(得分:0)

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

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

希望这可以解决问题。

答案 1 :(得分:0)

要比较数据框中的两列,应使用.query https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.query.html

import pandas as pd
d = {'col1': [1, 2, 6], 'col2': [3, 4, 5]}
df = pd.DataFrame(data=d)
df.query('col1 > col2')
相关问题