我试图通过功能来了解Pandas群
import pandas as pd
data=[['a',3],['a',3],['b',1],['a',0],['b',0]]
df=pd.DataFrame(data,columns=['Room','Value'])
print(df)
sum_df=df.groupby(['Room']).agg(
sumValue =('Value','sum'),
nonBlankOccasion =('Value', lambda x: x>0).count())
).reset_index()
print(sum_df)
字符串
我试图得到一个结果的房间,总和(值)和数字的场合非零值。但我不能得到正确的答案,通过使用上述代码。它给了我的计数所有记录的房间
Room sumValue nonBlankOccation
0 a 6 3
1 b 1 2
型
但是,如果我改成
sum_df=df.groupby(['Room']).agg(
sumValue =('Value','sum'),
nonBlankOccasion =('Value', lambda x:(x>0).sum())
).reset_index()
型
结果是正确的。
Room sumValue nonBlankOccation
0 a 6 2
1 b 1 1
型
有谁能帮我理解为什么这里是sum()而不是count()?非常感谢!
ELAC
我在group by函数中尝试了sum()和count()。我希望count()给我给予正确的答案,但sum()是正确的。我想知道为什么。
1条答案
按热度按时间amrnrhlw1#
如果你打印出lambda函数的一个参数,你会看到它是pandas Series的一个对象。每个组的类型都被打印出来,因此打印了两次:
字符串
然后你可以打印出你到底在计算/求和什么:
型
它们都是具有True / False值的pandas Series,都具有组长度。
因此,当应用
count
时,你会得到序列的长度,即组的大小。当求和时,你会得到正确的结果,因为它与序列中True值的数量相同,这是你要找的。