গোষ্ঠীভুক্ত পান্ডাস ডেটাফ্রেম কীভাবে লুপ করবেন?


146

DataFrame:

  c_os_family_ss c_os_major_is l_customer_id_i
0      Windows 7                         90418
1      Windows 7                         90418
2      Windows 7                         90418

কোড:

print df
for name, group in df.groupby('l_customer_id_i').agg(lambda x: ','.join(x)):
    print name
    print group

আমি একত্রিত ডেটা কেবল লুপ করার চেষ্টা করছি, তবে আমি ত্রুটি পেয়েছি:

ValueError: আনপ্যাক করার জন্য অনেকগুলি মান

@ এডচাম, এখানে প্রত্যাশিত আউটপুট:

                                                    c_os_family_ss  \
l_customer_id_i
131572           Windows 7,Windows 7,Windows 7,Windows 7,Window...
135467           Windows 7,Windows 7,Windows 7,Windows 7,Window...

                                                     c_os_major_is
l_customer_id_i
131572           ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,...
135467           ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,...

আউটপুট সমস্যা নয়, আমি প্রতিটি গ্রুপের উপর লুপ করতে চাই।

উত্তর:


224

df.groupby('l_customer_id_i').agg(lambda x: ','.join(x)) ইতিমধ্যে একটি ডেটাফ্রেম ফিরে আসে, যাতে আপনি আর গ্রুপগুলি লুপ করতে পারবেন না।

সাধারণভাবে:

  • df.groupby(...)একটি GroupByঅবজেক্ট (একটি ডেটা ফ্রেমগ্রুপবি বা সিরিজগ্রুপবি) প্রদান করে এবং এটির সাহায্যে আপনি গ্রুপগুলির মাধ্যমে পুনরাবৃত্তি করতে পারেন ( এখানে ডক্সে বর্ণিত হিসাবে )। আপনি যেমন কিছু করতে পারেন:

    grouped = df.groupby('A')
    
    for name, group in grouped:
        ...
    
  • আপনি যখন groupby, আপনার উদাহরণে উপর একটি ফাংশন প্রয়োগ df.groupby(...).agg(...)(কিন্তু এটাও হতে পারে transform, apply, mean, ...), আপনি মেশা ফল আবেদন একসঙ্গে এক dataframe বিভিন্ন গোষ্ঠীতে ফাংশন (প্রযোজ্য এবং পদক্ষেপ মেশা গ্রুপপাইয়ের 'স্প্লিট-অ্যাপ্লিকেশন-কম্বাইন' দৃষ্টান্ত)। সুতরাং এর ফলাফলটি সর্বদা আবার ডেটাফ্রেম (বা প্রয়োগিত ফাংশনের উপর নির্ভর করে একটি সিরিজ) হবে।


50

এখানে pd.DataFrameকলাম দ্বারা গোষ্ঠীভুক্ত পুনরাবৃত্তি একটি উদাহরণ atable। একটি নমুনা ব্যবহারের জন্য, একটি এসকিউএল ডাটাবেসের জন্য "তৈরি করুন" বিবৃতি forলুপের মধ্যে তৈরি করা হয় :

import pandas as pd

df1 = pd.DataFrame({
    'atable':     ['Users', 'Users', 'Domains', 'Domains', 'Locks'],
    'column':     ['col_1', 'col_2', 'col_a', 'col_b', 'col'],
    'column_type':['varchar', 'varchar', 'int', 'varchar', 'varchar'],
    'is_null':    ['No', 'No', 'Yes', 'No', 'Yes'],
})

df1_grouped = df1.groupby('atable')

# iterate over each group
for group_name, df_group in df1_grouped:
    print('\nCREATE TABLE {}('.format(group_name))

    for row_index, row in df_group.iterrows():
        col = row['column']
        column_type = row['column_type']
        is_null = 'NOT NULL' if row['is_null'] == 'NO' else ''
        print('\t{} {} {},'.format(col, column_type, is_null))

    print(");")

8
প্রদর্শক যে আপনি একটি পৃথক মাধ্যমে পুনরুক্তি করতে পারেন জন্য ধন্যবাদ groupব্যবহার for row, data in group.iterrows()!
ট্যাটলার

16

আপনার ডেটাফ্রেমটি ইতিমধ্যে তৈরি করা থাকলে আপনি সূচীর মানগুলিতে পুনরাবৃত্তি করতে পারেন।

df = df.groupby('l_customer_id_i').agg(lambda x: ','.join(x))
for name in df.index:
    print name
    print df.loc[name]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.