我的问题围绕在pandas中使用groupby函数并尝试组合两个数据集。
现在我的数据看起来像这样:
Name Price
James 2
Jon 3
James 0
Bob 4
Bob 0
我需要的是来创建包含三个指标的数据集:每个名称的价格总和,每个名称的价格为零的数字实例的数量,以及每个名字出现的时间..
理想情况下,输出看起来像这样
Name Price Count of Frequency Count of Zero
James 2 2 1
Jon 3 1 0
Bob 4 1 1
现在我的代码看起来像:
newlist = df1.join(s)
countif = newlist.groupby(['KW']).size().reset_index()
group = newlist.groupby(['KW'])
sumif = group.sum().reset_index()
zero = newlist[newlist['Price'] == 0.0]
zero2 = zero.groupby(['KW']).size().reset_index()
concat = pd.concat([sumif,countif,zero2], axis=1)
但是这有许多缺点:它是unpythonic和低效的,它会创建KW列的重复行,并且它不会以统一的方式排列所有数据,因为当" zero2"变量只显示那些价格为0的KW,所以我得到这样的结果:
KW Price KW 0 KW 0
James 2 james 2 James 1
Bob 4 Bob 2 Bob 1
答案 0 :(得分:2)
您正在寻找带有申请的群组。
def func(x):
return pd.Series({'Obs': len(x)
, 'Sum': x.price.sum()
, 'Zeros': len(x[x.price==0])})
用法:
df.groupby(["name"]).apply(func)