Python |熊猫|使用Lambda多个条件来计算具有值和NAN

时间:2020-04-25 13:28:03

标签: python-3.x pandas list lambda

我正在尝试使用python pandas函数来计算实例数量与“客户名称”,“客户ID”和“票证数量”的对比。

我注意到在某些行中尽管有票证和客户名,但用户ID却不存在。 我想要一个表,其中包含由客户名称打开且没有客户ID的票证(行)总和。

我希望得到一个类似于以下的表格:

enter image description here

我使用了lambada函数:

for  CustomertID in CustomerIDList:


CustomerID_Series=ExlReport.apply(lambda x:True if x['Account Name'] == CustomerID  else False, axis=1)
numOfRows = len(CustomerID_Series[CustomerID_Series == True].index)
countList.append(numOfRows)

我得到以下输出:

enter image description here

所以我的问题是: 如何使用lambda根据客户名称和客户ID具有多个条件,以及如何汇总以下行的计数/凭单编号: 1)找到客户名称,但没有客户ID。 2)找到客户名称和客户ID。

我想到了在客户名而不是客户ID列表上使用for循环,但是我对此却感到困惑。

谢谢

1 个答案:

答案 0 :(得分:0)

这个问题我没有得到任何答案,但是我自己解决了这个问题,没有使用lambada,也没有使用for循环。添加解决方案以供参考:

我用“ N / A”字符串值替换了“客户ID”中的空单元格,并使用“ group by”和“ size()”来获取票证计数。

解决方案如下:

1-对df进行排序,以使空单元格首先具有NAN值:

df = (df[['Customer Name','Customer ID']]).sort_values(by=["Customer Name","Customer ID"],axis = 0,ascending = [True,True],na_position='first')

2-将“客户ID”列中的空单元格替换为字符串“ N / A”:

df['Customer ID'] = df['Customer ID'].replace(np.nan, 'N/A')

3-使用分组依据按两列对df进行分组,优先级为“客户名称”

4-size将用于计算行数

5-需要重置索引才能将列名称“ Ticket Count”添加到df:

df = ((df.***groupby***(["Customer Name","Customer ID"],as_index = False)).***size()***.***reset_index(name="Ticket Count"***))

6-将“ N / A”替换为“:

df["Customer ID"] = df["Customer ID"].replace('N/A','')

7-输出类似于以下内容: Output