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


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.