পান্ডাস দলবদ্ধ এবং যোগফল


205

আমি এই ডেটা ফ্রেমটি ব্যবহার করছি:

Fruit   Date      Name  Number
Apples  10/6/2016 Bob    7
Apples  10/6/2016 Bob    8
Apples  10/6/2016 Mike   9
Apples  10/7/2016 Steve 10
Apples  10/7/2016 Bob    1
Oranges 10/7/2016 Bob    2
Oranges 10/6/2016 Tom   15
Oranges 10/6/2016 Mike  57
Oranges 10/6/2016 Bob   65
Oranges 10/7/2016 Tony   1
Grapes  10/7/2016 Bob    1
Grapes  10/7/2016 Tom   87
Grapes  10/7/2016 Bob   22
Grapes  10/7/2016 Bob   12
Grapes  10/7/2016 Tony  15

আমি নাম অনুসারে এবং তারপরে ফল অনুসারে মোট নাম্বার ফলের মোট সংখ্যা পেতে এই সংগ্রহ করতে চাই।

Bob,Apples,16 ( for example )

আমি নাম এবং ফলের দ্বারা গ্রুপিং করার চেষ্টা করেছি তবে আমি কীভাবে ফলের মোট সংখ্যা পাই।

উত্তর:


209

ব্যবহার GroupBy.sum:

df.groupby(['Fruit','Name']).sum()

Out[31]: 
               Number
Fruit   Name         
Apples  Bob        16
        Mike        9
        Steve      10
Grapes  Bob        35
        Tom        87
        Tony       15
Oranges Bob        67
        Mike       57
        Tom        15
        Tony        1

94
পান্ডস কীভাবে জানতে পারে যে আমি নামটির বীজ যোগ করতে চাই Number?
কিংমনেম

12
@ কিংসনামটি যদি আপনি NAME এবং FRUIT নেন তবে এটি সর্বশেষ কলামের বাকি। যদি আপনি 2 টি কলাম বামে যোগ করেন তবে এটি উভয় কলামের সমষ্টি হবে
স্টিভেন জি

9
কোন কলামের যোগফল নির্দিষ্ট করবেন?
tgdn

34
@tgdn df.groupby (['নাম', 'ফল']] ['সংখ্যা']। যোগফল ()
স্টিভেন জি

2
@ স্টেভেনজি একটি নির্দিষ্ট কলামের যোগফল সরবরাহের জন্য, আউটপুট ডেটাফ্রেমের পরিবর্তে পান্ডা সিরিজ হিসাবে প্রকাশিত হবে। জাকুব কুকুলের মন্তব্য থেকে (নীচের উত্তরে), আমরা একটি ডেটা ফ্রেম পেতে 'সংখ্যা' এর আশেপাশে ডাবল বর্গাকার বন্ধনী ব্যবহার করতে পারি।
skdhfgeq2134

178

এছাড়াও আপনি আগ্রাসী ফাংশন ব্যবহার করতে পারেন,

df.groupby(['Name', 'Fruit'])['Number'].agg('sum')

1
এটি গৃহীত উত্তরের চেয়ে পৃথক যে এটি Seriesঅন্যদিকে কোনও GroupByবস্তু ফেরত দেয় returns
গৌরাঙ্গ ট্যান্ডন

11
DataFrameপরিবর্তে (গৃহীত উত্তরের মতো) বস্তুটি পেতে গৌরাঙ্গট্যান্ডন , চারপাশে ডাবল বর্গাকার বন্ধনী ব্যবহার করুন 'Number', যেমন:df.groupby(['Name', 'Fruit'])[['Number']].agg('sum')
জাকুব কুকুল

1
খারাপভাবে এনকোডযুক্ত ক্যোয়ারী রিপোর্ট পরিষ্কার করতে খুব সহায়ক।
avirr

92

আপনি যদি মূল কলামগুলি রাখতে চান Fruitএবং Nameব্যবহার করুন reset_index()। অন্যথায় Fruitএবং Nameসূচকের অংশ হয়ে যাবে।

df.groupby(['Fruit','Name'])['Number'].sum().reset_index()

Fruit   Name       Number
Apples  Bob        16
Apples  Mike        9
Apples  Steve      10
Grapes  Bob        35
Grapes  Tom        87
Grapes  Tony       15
Oranges Bob        67
Oranges Mike       57
Oranges Tom        15
Oranges Tony        1

অন্যান্য উত্তরে যেমন দেখা যায়:

df.groupby(['Fruit','Name'])['Number'].sum()

               Number
Fruit   Name         
Apples  Bob        16
        Mike        9
        Steve      10
Grapes  Bob        35
        Tom        87
        Tony       15
Oranges Bob        67
        Mike       57
        Tom        15
        Tony        1

43

অন্যান্য উত্তর দুটিই আপনি যা চান তা পূরণ করে।

pivotএকটি সুন্দর টেবিলের মধ্যে ডেটা সাজানোর জন্য আপনি কার্যকারিতাটি ব্যবহার করতে পারেন

df.groupby(['Fruit','Name'],as_index = False).sum().pivot('Fruit','Name').fillna(0)



Name    Bob     Mike    Steve   Tom    Tony
Fruit                   
Apples  16.0    9.0     10.0    0.0     0.0
Grapes  35.0    0.0     0.0     87.0    15.0
Oranges 67.0    57.0    0.0     15.0    1.0

19
df.groupby(['Fruit','Name'])['Number'].sum()

সংখ্যার যোগ করতে আপনি বিভিন্ন কলাম নির্বাচন করতে পারেন।


7

আপনি সেট করতে পারেন groupbyকলাম index তারপর ব্যবহার sumসঙ্গেlevel

df.set_index(['Fruit','Name']).sum(level=[0,1])
Out[175]: 
               Number
Fruit   Name         
Apples  Bob        16
        Mike        9
        Steve      10
Oranges Bob        67
        Tom        15
        Mike       57
        Tony        1
Grapes  Bob        35
        Tom        87
        Tony       15

3

.Agg () ফাংশনে একটি প্রকরণ; (1) ডেটাফ্রেম টাইপ করতে, (2) গড়, গণনা, সংক্ষিপ্তকরণ ইত্যাদি প্রয়োগ করার ক্ষমতা প্রদান করে এবং (3) সুস্পষ্টতা বজায় রাখার সময় একাধিক কলামে গ্রুপবাই সক্ষম করে।

df.groupby(['att1', 'att2']).agg({'att1': "count", 'att3': "sum",'att4': 'mean'})

আপনার মান ব্যবহার করে ...

df.groupby(['Name', 'Fruit']).agg({'Number': "sum"})
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.