我的问题是我不知道如何比较两个不同列中的数字(在相同的数据帧中)。我想知道第二列中的数字是否至少比同一行中第一列的数字大两倍,并检查其余行的数字是否相同,并最终过滤它们,最后得到一个数据帧,其中第二列中的所有数字都至少比第一列中的数字大两倍。所以,一开始我是这样做的:
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')发布于 2019-02-20 07:39:07
您可以为每一列创建一个新的序列数据帧,并使用该数据帧进行比较。
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,:]希望这能解决这个问题。
发布于 2019-02-20 07:40:37
要比较数据帧中的两列,应使用.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')https://stackoverflow.com/questions/54776540
复制相似问题