gpt4 book ai didi

python - 计算 Pandas 组中满足特定条件的行数

转载 作者:太空宇宙 更新时间:2023-11-04 05:37:38 25 4
gpt4 key购买 nike

我正在尝试向 DataFrame 添加一列,指示客户在订单中包含超过 10 件商品的次数。

我的代码目前看起来像:

import pandas as pd


my_data = {'customer_id' : ['101A', '101A', '104B', '102A', '101A', '104B', '102A', '104B', '101A', '102A' ],
'date' : ['20120321','20120201','20120123','20111218','20111209','20111127','20111118','20111012','20111001','20110921'],
'invoice_amt' : [654.76, 234.45, 99.45, 767.63, 124.76, 346.87, 652.65, 765.21, 275.76, 532.21 ],
'no_line_items' : [19, 24, 6, 2, 6, 4, 18, 10, 18, 8]}


data_df = pd.DataFrame(my_data).sort_index(by='date',ascending=True)

计算每个客户每张发票的最大项目数:

data_df['max_line_items'] = data_df.groupby('customer_id')['no_line_items'].transform(lambda x: x.max())

计算出每个客户的发票数量,其中项目大于或等于 10:

data_df['no_vip_invoices'] = data_df.groupby('customer_id')[data_df['no_line_items']>10].transform(lambda x: x.count())

我理想的输出是:

  customer_id      date  invoice_amt  no_line_items  max_line_items   no_vip_invoices
9 102A 20110921 532.21 8 18 1
8 101A 20111001 275.76 18 24 3
7 104B 20111012 765.21 10 10 0
6 102A 20111118 652.65 18 18 1
5 104B 20111127 346.87 4 10 0
4 101A 20111209 124.76 6 24 3
3 102A 20111218 767.63 2 18 1
2 104B 20120123 99.45 6 10 0
1 101A 20120201 234.45 24 24 3
0 101A 20120321 654.76 19 24 3

当前遇到错误

KeyError: 'Columns not found: True'

如有任何帮助,我们将不胜感激

谢谢

V

最佳答案

使用lambda

这为您提供了所需的输出数据帧:

grouped = data_df.groupby('customer_id')
data_df['max_line_items'] = grouped['no_line_items'].transform(lambda x: x.max())
data_df['no_vip_invoices'] = grouped['no_line_items'].transform(lambda x: len(x[x>10]))


print(data_df.to_string())

输出:

  customer_id      date  invoice_amt  no_line_items  max_line_items  no_vip_invoices
9 102A 20110921 532.21 8 18 1
8 101A 20111001 275.76 18 24 3
7 104B 20111012 765.21 10 10 0
6 102A 20111118 652.65 18 18 1
5 104B 20111127 346.87 4 10 0
4 101A 20111209 124.76 6 24 3
3 102A 20111218 767.63 2 18 1
2 104B 20120123 99.45 6 10 0
1 101A 20120201 234.45 24 24 3
0 101A 20120321 654.76 19 24 3

使用def

如果您不喜欢或不想使用 lambda,您可以随时使用普通函数:

def by_max(group):
"""Group by maximum.
"""
return group.max()

def by_len(group):
"""Group by length greater 10.
"""
return len(group[group>10])

data_df['max_line_items'] = grouped['no_line_items'].transform(by_max)
data_df['no_vip_invoices'] = grouped['no_line_items'].transform(by_len)

结果同上。这种方法的一个优点是您可以使用文档字符串。此外,您还可以使用 lambda 无法使用的语句。

关于python - 计算 Pandas 组中满足特定条件的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35120607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com