मेरे पास एक साधारण डेटाफ्रेम है:

     A       B
     1   2   1   2
Foo  100 200 300 400
Bar  100 200 300 400

मैं एक नया कॉलम जोड़ना चाहता हूं जो (बी, 2) - (ए, 2) है

मैंने जो कोशिश की है वह है: df["Chg",,"Period"] = [df.loc[:, [("B",2)]] - df.loc[:, [("A", 2) ]]]

लेकिन मुझे बताया गया है कि:

मानों की लंबाई इंडेक्स की लंबाई से मेल नहीं खाती

मैं थोड़ा भ्रमित हूँ - मैंने सोचा था कि मेरे नए कॉलम के लिए दो कॉलम हेडर होने से यह काम करेगा, लेकिन अब मैं संघर्ष कर रहा हूँ। कोई भी सहायता सराहनीय होगी

धन्यवाद

0
harrison10001 22 अप्रैल 2020, 17:33

1 उत्तर

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

चुनिंदा MultiIndex और नए मल्टीइंडेक्स कॉलम के लिए भी टुपल्स का उपयोग करें:

df[("Chg","Period")]  = df[("B",2)] - df[("A", 2)]

print (df)
       A         B         Chg
       1    2    1    2 Period
Foo  100  200  300  400    200
Bar  100  200  300  400    200

यदि एक साथ कई स्तंभों द्वारा काम करना चाहते हैं, उदा। DataFrame.xs, फिर MultiIndex.from_product और DataFrame.join:

df1 = df.xs('B', axis=1, level=0) - df.xs('A', axis=1, level=0)
df1.columns = pd.MultiIndex.from_product([['Diff'], df1.columns])
print (df1)
    Diff     
       1    2
Foo  200  200
Bar  200  200

df = df.join(df1)
print (df)
       A         B      Diff     
       1    2    1    2    1    2
Foo  100  200  300  400  200  200
Bar  100  200  300  400  200  200
1
jezrael 22 अप्रैल 2020, 17:43