मेरे पास निम्नलिखित डीएफ है, जिसे मैं 'नाम' से समूहित करना चाहता हूं, इसलिए 'ए' और 'बी' गिनती कॉलम और 'कुल बिक्री' योग कॉलम है:

उदाहरण के लिए इसे चालू करें:

data = {'A or B' : ['A','A','B','B','A','B'],
        'Name' : ['Ben','Ben','Ben','Sam','Sam','Sam'],
        'Sales ($)' : [10,5,2,5,6,7]
       }

df=pd.DataFrame(data, columns = ['A or B','Name','Sales ($)'])

तो यह इस तरह दिखता है:

grouped_data = {'A' : [2,1],
        'B' : [1,2],
        'Name' : ['Ben','Sam'],
        'Total Sales ($)' : [17,18]
       }

df=pd.DataFrame(grouped_data, columns = ['A','B','Name','Total Sales ($)'])
3
Ben H 10 अगस्त 2020, 19:39

3 जवाब

सबसे बढ़िया उत्तर

आप pd.get_dummies, join और groupby+sum के साथ प्रयास कर सकते हैं:

pd.get_dummies(df['A or B'])\
  .join(df.drop('A or B',1))\
  .groupby('Name',as_index=False).sum()

आउटपुट:

  Name  A  B  Sales ($)
0  Ben  2  1         17
1  Sam  1  2         18

विवरण:

डमी/संकेतक चर में श्रेणीबद्ध चर प्राप्त करने के लिए सबसे पहले get_dummies का उपयोग करें:

pd.get_dummies(df['A or B'])
#   A  B
#0  1  0
#1  1  0
#2  0  1
#3  0  1
#4  1  0
#5  0  1

फिर 'A or B' कॉलम के साथ मूल df के साथ डमी को जोड़ने के लिए शामिल हों का उपयोग करें:

pd.get_dummies(df['A or B']).join(df.drop('A or B',1))
#   A  B Name  Sales ($)
#0  1  0  Ben         10
#1  1  0  Ben          5
#2  0  1  Ben          2
#3  0  1  Sam          5
#4  1  0  Sam          6
#5  0  1  Sam          7

और अंत में, नाम के आधार पर groupby+sum करें:

pd.get_dummies(df['A or B']).join(df.drop('A or B',1)).groupby('Name',as_index=False).sum()
#  Name  A  B  Sales ($)
#0  Ben  2  1         17
#1  Sam  1  2         18
3
MrNobody33 10 अगस्त 2020, 20:15

आप groupby के अंदर एग्रीगेशन के साथ काम कर सकते हैं

df.groupby(['Name']).agg(A = ('A or B', lambda x: (x=='A').sum())
                        ,B = ('A or B', lambda x: (x=='B').sum())
                        ,total = ('Sales ($)', 'sum')).reset_index()
#output
    Name    A   B   total
0   Ben     2   1   17
1   Sam     1   2   18
1
Terry 10 अगस्त 2020, 20:44

चरण-दर-चरण समाधान:

import pandas as pd
data = {'A or B' : ['A','A','B','B','A','B'],
        'Name' : ['Ben','Ben','Ben','Sam','Sam','Sam'],
        'Sales ($)' : [10,5,2,5,6,7]
       }

df=pd.DataFrame(data, columns = ['A or B','Name','Sales ($)'])

#first create dummy for 'A or B' column
y = pd.get_dummies(df['A or B'])

#concatenate with original data frame
df=pd.concat([y,df], axis=1)
#delete the column
del df['A or B']

#now do the group by
df=df.groupby('Name').agg({'A':'sum',
                         'B':'sum', 
                         'Sales ($)': 'sum'})

#reset the index
df.reset_index(level=0, inplace=True)
print(df)

आउटपुट:

  Name  A  B  Sales ($)
0  Ben  2  1         17
1  Sam  1  2         18
0
vipul singhal 10 अगस्त 2020, 20:12