কম্পিউটার টিউটোরিয়াল

পাইথন: প্যান্ডাসে GroupBy ব্যবহার করে পজিটিভ ও নেগেটিভ মানের যোগফল বের করা

প্যান্ডাসে 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()
)
  1. পাইথন পান্ডাসে ফরওয়ার্ড ফিল দিয়ে নন-নাল মান প্রসারিত করা

  2. পান্ডাসে notnull() দিয়ে নাল মান চেক করা

  3. পান্ডাসে interpolate() দিয়ে NaN মান পূরণ করা

  4. পান্ডাসে fillna(method='bfill') দিয়ে পिछwärts ফিল করা