मैं प्रत्येक Year के लिए Sales और Profit के लिए कॉलम प्राप्त करने के लिए पिवट का उपयोग करके एक तालिका को कनवर्ट करने का प्रयास कर रहा हूं। मैं नए कॉलम को उचित रूप से उपसर्ग करने में सक्षम होना चाहता हूं, यानी sales_(Year), profit_(Year)?

क्या अलग-अलग मानों के लिए पांडा में अलग-अलग उपसर्ग जोड़ने का कोई तरीका है?

d = {'SourceID': [1, 1, 2, 2, 3, 3, 3], 'Year': [0, 1, 0, 1, 1, 2, 3], 'Sales': [100, 200, 300, 400 , 500, 600, 700], 'Profit': [10, 20, 30, 40, 50, 60, 70]}
df = pd.DataFrame(data=d)

मैं निम्नलिखित का उपयोग करके जानकारी को उपयुक्त संरचना में प्राप्त कर सकता हूं:

result = (
  df
  .pivot_table(
    index=['SourceID'],
    columns=['Year'],
    values=['Sales', 'Profit'],
    fill_value=0,
    aggfunc='mean'
  )
  .add_prefix('sales_')
  .reset_index()
)

हालांकि मैं यह नहीं समझ सकता कि बिक्री और लाभ के लिए अलग-अलग उपसर्गों को कैसे जोड़ा जाए। फिलहाल मैं हर चीज के लिए सिर्फ sales_ के साथ फंस गया हूं।

|      | ('SourceID', '') | ('sales_Profit', 'sales_0') | ('sales_Profit', 'sales_1') | ('sales_Profit', 'sales_2') | ('sales_Profit', 'sales_3') | ('sales_Sales', 'sales_0') | ('sales_Sales', 'sales_1') | ('sales_Sales', 'sales_2') | ('sales_Sales', 'sales_3') |
| ---: | ---------------: | --------------------------: | --------------------------: | --------------------------: | --------------------------: | -------------------------: | -------------------------: | -------------------------: | -------------------------: |
|    0 |                1 |                          10 |                          20 |                           0 |                           0 |                        100 |                        200 |                          0 |                          0 |
|    1 |                2 |                          30 |                          40 |                           0 |                           0 |                        300 |                        400 |                          0 |                          0 |
|    2 |                3 |                           0 |                          50 |                          60 |                          70 |                          0 |                        500 |                        600 |                        700 |
|      | ('SourceID', '') | ('Profit', 'profit_0') | ('Profit', 'profit_1') | ('Profit', 'profit_2') | ('Profit', 'profit_3') | ('Sales', 'sales_0') | ('Sales', 'sales_1') | ('Sales', 'sales_2') | ('Sales', 'sales_3') |
| ---: | ---------------: | ---------------------: | --------------------: | ---------------------: | ---------------------: | -------------------: | -------------------: | -------------------: | -------------------: |
|    0 |                1 |                     10 |                    20 |                      0 |                      0 |                  100 |                  200 |                    0 |                    0 |
|    1 |                2 |                     30 |                    40 |                      0 |                      0 |                  300 |                  400 |                    0 |                    0 |
|    2 |                3 |                      0 |                    50 |                     60 |                     70 |                    0 |                  500 |                  600 |                  700 |

###### Original Table

|      | SourceID | Year | Sales | Profit |
| ---: | -------: | ---: | ----: | -----: |
|    0 |        1 |    0 |   100 |     10 |
|    1 |        1 |    1 |   200 |     20 |
|    2 |        2 |    0 |   300 |     30 |
|    3 |        2 |    1 |   400 |     40 |
|    4 |        3 |    1 |   500 |     50 |
|    5 |        3 |    2 |   600 |     60 |
|    6 |        3 |    3 |   700 |     70 |
3
ceharep 7 अप्रैल 2020, 15:17

1 उत्तर

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

पहले स्तर के लोअरकेस मानों के लिए f-strings के साथ सूची समझ का उपयोग करें और दूसरे स्तर पर जोड़ें:

result = (
  df
  .pivot_table(
    index=['SourceID'],
    columns=['Year'],
    values=['Sales', 'Profit'],
    fill_value=0,
    aggfunc='mean'
  ))

L = [(a, f'{a.lower()}{b}') for a,b  in result.columns]
result.columns = pd.MultiIndex.from_tuples(L)
result = result.reset_index()
print (result)
  SourceID  Profit                          Sales                     
           profit0 profit1 profit2 profit3 sales0 sales1 sales2 sales3
0        1      10      20       0       0    100    200      0      0
1        2      30      40       0       0    300    400      0      0
2        3       0      50      60      70      0    500    600    700
1
jezrael 7 अप्रैल 2020, 12:33