我正在尝试使用python pandas函数来计算实例数量与“客户名称”,“客户ID”和“票证数量”的对比。
我注意到在某些行中尽管有票证和客户名,但用户ID却不存在。 我想要一个表,其中包含由客户名称打开且没有客户ID的票证(行)总和。
我希望得到一个类似于以下的表格:
我使用了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)
我得到以下输出:
所以我的问题是: 如何使用lambda根据客户名称和客户ID具有多个条件,以及如何汇总以下行的计数/凭单编号: 1)找到客户名称,但没有客户ID。 2)找到客户名称和客户ID。
我想到了在客户名而不是客户ID列表上使用for循环,但是我对此却感到困惑。
谢谢
答案 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','')