প্যান্ডাসে groupby() এবং কাস্টম অ্যাগ্রিগেশন ফাংশন ব্যবহার করে গ্রুপভিত্তিক পজিটিভ এবং নেগেটিভ মানের যোগফল আলাদা আলাদা বের করা যায়।
উদাহরণ: স্থানের ভিত্তিতে তাপমাত্রার পজিটিভ/নেগেটিভ যোগফল
import pandas as pd
df = pd.DataFrame({
'Place': ['Chicago', 'Denver', 'Atlanta', 'Chicago', 'Dallas', 'Denver', 'Dallas', 'Atlanta'],
'Temperature': [-2, 30, -5, 10, 30, -5, 20, -10]
})
print("মূল ডেটাফ্রেম:")
print(df)
# গ্রুপবাই
grouped = df.groupby(df['Place'])
# কাস্টম ফাংশন: পজিটিভ যোগফল
def positive_sum(val):
return val[val > 0].sum()
# কাস্টম ফাংশন: নেগেটিভ যোগফল
def negative_sum(val):
return val[val < 0].sum()
# অ্যাগ্রিগেশন
result = grouped['Temperature'].agg([('negTemp', negative_sum), ('posTemp', positive_sum)])
print("\nপজিটিভ ও নেগেটিভ তাপমাত্রার যোগফল:")
print(result)
আউটপুট
মূল ডেটাফ্রেম:
Place Temperature
0 Chicago -2
1 Denver 30
2 Atlanta -5
3 Chicago 10
4 Dallas 30
5 Denver -5
6 Dallas 20
7 Atlanta -10
পজিটিভ ও নেগেটিভ তাপমাত্রার যোগফল:
negTemp posTemp
Place
Atlanta -15 0
Chicago -2 10
Dallas 0 50
Denver -5 30
ব্যাখ্যা
val[val > 0]— শুধু পজিটিভ মানগুলো বেছে নেয় (বুলিয়ান ইন্ডেক্সিং).sum()— বেছে নেওয়া মানগুলোর যোগফল.agg([('name', func), ...])— একাধিক কাস্টম ফাংশন প্রয়োগ করে নামকৃত কলাম তৈরি করে
সংক্ষিপ্ত ল্যাম্বডা সংস্করণ
result = grouped['Temperature'].agg(
negTemp=lambda x: x[x < 0].sum(),
posTemp=lambda x: x[x > 0].sum()
)
আরও ফ্লেক্সিবল: describe() বা কাস্টম
# বিল্ট-ইন describe (কোয়ান্টাইলসহ)
print(grouped['Temperature'].describe())
# শুধু পজিটিভ/নেগেটিভ কাউন্ট ও যোগফল
result = grouped['Temperature'].agg(
pos_count=lambda x: (x > 0).sum(),
neg_count=lambda x: (x < 0).sum(),
pos_sum=lambda x: x[x > 0].sum(),
neg_sum=lambda x: x[x < 0].sum()
)