পান্ডায় দুটি কলাম দ্বারা শ্রেণিবদ্ধ মানগুলিকে কীভাবে যুক্ত করতে হয়


21

আমার কাছে এর মতো একটি পান্ডাস ডেটা ফ্রেম রয়েছে:

df = pd.DataFrame({
    'Date': ['2017-1-1', '2017-1-1', '2017-1-2', '2017-1-2', '2017-1-3'],
    'Groups': ['one', 'one', 'one', 'two', 'two'],
    'data': range(1, 6)})

    Date      Groups     data  
0  2017-1-1    one       1
1  2017-1-1    one       2
2  2017-1-2    one       3
3  2017-1-2    two       4
4  2017-1-3    two       5

আমি কীভাবে এটির মতো একটি নতুন ডেটাফ্রেম তৈরি করতে পারি:

    Date       one     two 
0  2017-1-1    3        0
1  2017-1-2    3        4
2  2017-1-3    0        5

উত্তর:


16

pivot_table এই জন্য তৈরি করা হয়েছিল:

df.pivot_table(index='Date',columns='Groups',aggfunc=sum)

ফলাফল স্বরূপ

         data
Groups    one  two
Date
2017-1-1  3.0  NaN
2017-1-2  3.0  4.0
2017-1-3  NaN  5.0

ব্যক্তিগতভাবে আমি এই পদ্ধতিকে বুঝতে সহজতর এবং নিশ্চিতভাবে একটি সংশ্লেষিত গ্রুপবাইয়ের অপারেশন থেকে বেশি পাইথনিক find তারপরে আপনি যদি নির্দিষ্ট ফর্ম্যাটটি চান তবে আপনি এটি পরিষ্কার করতে পারেন:

df.fillna(0,inplace=True)
df.columns = df.columns.droplevel()
df.columns.name = None
df.reset_index(inplace=True)

যা আপনাকে দেয়

       Date  one  two
0  2017-1-1  3.0  0.0
1  2017-1-2  3.0  4.0
2  2017-1-3  0.0  5.0

1
নিস! এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
— tuomastik

@ জোশ ডি। এটি দুর্দান্ত এবং সরল! আমি সম্মত হই যে গ্রুপবাই কীভাবে কাজ করে তা নির্ধারণ করতে কিছুটা মস্তিষ্কের শক্তি লাগে। ধন্যবাদ!
— কেভিন

8

পান্ডাস কালো যাদু:

df = df.groupby(['Date', 'Groups']).sum().sum(
    level=['Date', 'Groups']).unstack('Groups').fillna(0).reset_index()

# Fix the column names
df.columns = ['Date', 'one', 'two']

ফলাফল df:

       Date  one  two
0  2017-1-1  3.0  0.0
1  2017-1-2  3.0  4.0
2  2017-1-3  0.0  5.0

পবিত্র! কালো যাদু এত শক্তিশালী! অনেক ধন্যবাদ!
— কেভিন

আপনাকে স্বাগতম! আপডেট উত্তর দেখুন; আমি অভিব্যক্তিটি সরল করেছিলাম এবং অনুরোধ অনুসারে কলামের নামগুলির জন্য একটি ফিক্স যুক্ত করেছি।
— tuomastik

আমি মনে করি আপনার আগের সংস্করণটির সুবিধা রয়েছে কারণ এটি অন্যান্য আরও জটিল ডেটা সেটগুলিতে প্রয়োগ করা যেতে পারে। আমি এটি এখানে অনুলিপি করেছি: df.groupby (['তারিখ', 'গোষ্ঠী', 'তথ্য']) ['ডেটা']। যোগ () স্তর (স্তর = ['তারিখ', 'গোষ্ঠী']) আনস্ট্যাক ( 'গোষ্ঠী') fill ফিলিনা (0)
— কেভিন

@ কেভিন যদি এটি বা ভবিষ্যতের কোনও উত্তর যদি আপনার সমস্যার সমাধান করে তবে দয়া করে উত্তরটি গ্রহণ করুন।
— tuomastik
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.