मेरे पास यह डेटा फ्रेम है:

Ind1                Ind2         M     F
Business Analyst    1-2 years    50    55
Business Analyst    10-20 years  47    23
DBA Engineer        1-2 years    31    12
DBA Engineer        10-20 years  21    10

मैं व्यक्तिगत रूप से एम और एफ के लिए कुल गिनती की गणना करना चाहता हूं और एक अद्वितीय व्यवसाय प्रविष्टि (इस मामले में दूसरी पंक्ति) के अंत के बाद इसे सम्मिलित करना चाहता हूं। डेटा फ़्रेम बहु-अनुक्रमित (Ind1 और Ind2) है। तो मेरा अंतिम डेटा फ्रेम होना चाहिए:

Ind1                Ind2         M     F
Business Analyst    1-2 years    50    55
Business Analyst    10-20 years  47    23
Total               Not required 97    78
DBA Engineer        1-2 years    31    12
DBA Engineer        10-20 years  21    10
Total               Not required 52    22

मैं इसे पांडा में कैसे कर सकता हूं? मैं इसे ठीक से कोड करने में सक्षम नहीं हूं।

नोट: नई पंक्तियाँ अनुक्रमणिका का हिस्सा होनी चाहिए (अर्थात इसके अंदर)।

2
shiv_90 25 पद 2020, 14:38

2 जवाब

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

एक तरीका यह है कि groupby डेटाफ़्रेम Ind1 पर और sum का उपयोग करके एकत्र करें, फिर इस एकत्रित डेटाफ़्रेम को df और sort के मानों में जोड़ें Ind1:

df1 = df.append(df.groupby('Ind1', as_index=False).sum()\
        .assign(Ind2='Not Required')).sort_values('Ind1', ignore_index=True)

df1.loc[df1['Ind2'].eq('Not Required'), 'Ind1'] = 'Total'

एक और समान दृष्टिकोण लेकिन यहां हम प्रत्येक समूहबद्ध फ़्रेम को df में अलग से संसाधित करते हैं, इसके बाद सभी समूहीकृत फ़्रेमों को संयोजित करते हैं:

f = lambda g: g.append({'Ind1': 'Total', 'Ind2': 'Not Required', **g[['M','F']].sum()}, ignore_index=True)
df1 = pd.concat([f(g) for _, g in df.groupby('Ind1')], ignore_index=True)

नतीजा:

               Ind1          Ind2   M   F
0  Business Analyst     1-2 years  50  55
1  Business Analyst   10-20 years  47  23
2             Total  Not Required  97  78
3      DBA Engineer     1-2 years  31  12
4      DBA Engineer   10-20 years  21  10
5             Total  Not Required  52  22
1
Shubham Sharma 25 पद 2020, 15:21

शायद लूप के लिए प्रयास करें:

df['index'] = range(len(df))
for i in range(1, len(df), 2):
    df.loc[len(df)] = ['Total', 'Not required', df.iloc[[i-1, i]]['M'].sum(), df.iloc[[i-1, i]]['F'].sum(), i + 0.1]
df = df.sort_values(by='index').drop('index', axis=1).reset_index(drop=True)
print(df)

आउटपुट:

               Ind1          Ind2   M   F
0  Business Analyst     1-2 years  50  55
1  Business Analyst   10-20 years  47  23
2             Total  Not required  97  78
3      DBA Engineer     1-2 years  31  12
4      DBA Engineer   10-20 years  21  10
5             Total  Not required  52  22
1
U11-Forward 25 पद 2020, 15:01