我是使用Python的Pandas的新手,我想寻求一些我认为比我有经验的人容易的帮助。
我有一个LOG文件,该文件有几列。这些列可以具有不同的状态。
我认为一个例子更好:
ID | ANSWER | DETAIL | .. | OTHERS
12345 | Complete | Answer_OK | .. | whatever
12346 | Incomplete | Answer_NOK | .. | whatever
12345 | Complete | Answer_NOK | .. | whatever
然后,当Answer =不完整时,我需要对“ ID”记录进行计数,但是当“ ID”具有“ Answer_OK”并且同时具有“ Answer_NOK”时,无需计数。
在excel中非常容易,因为您创建了一个动态表和一个新列,并放置了一个检查(IF A1 > 0 and A2 > 0, 0, 1)
的IF语句,然后将新列求和并得到了数字,但是在Pandas中,我可以没那么容易。
答案 0 :(得分:0)
您可以使用.loc []函数。例如,对于您想做的事情,您会做
df = df.loc[df["answer"]=="Incomplete"]
然后在下一行中,对您想要的其他值再次进行df = df.loc[df["details"]=="Answer_NOK"]
则df将等于您想要的数据框。
答案 1 :(得分:0)
import pandas as pd
import numpy as np
df = your_dataframe
df_grouped = df.groupby(["ID"]).aggregate({"ANSWER":list, "DETAIL":list}).reset_index()
mask = df_grouped["ANSWER"].map(lambda x: "Incomplete" in x) & ~(df_grouped["DETAIL"].map(lambda x: "Answer_OK" in x) & df_grouped["DETAIL"].map(lambda x: "Answer_NOK" in x))
print(np.sum(mask))
您的ID不是唯一的,因此您可以首先对数据框进行分组(例如excel数据透视表),并获取ID包含“ ANSWER”和“ DETAIL”的值的列表。 然后,您将拥有一个ID唯一的新数据框。借助此数据框,您可以创建一系列包含True / False的结果,以回答您的过滤器要求。
然后,您可以使用numpy计算该系列中“ True”的总和。