मैं पंडों के लिए काफी नया हूं, लेकिन मैं अच्छे स्तर पर अजगर का उपयोग करता हूं।

मेरे पास एक पांडा डेटाफ्रेम है जो निम्नानुसार व्यवस्थित है:

idrun    idbasin    time    q
-192540      1        0     0
-192540      1        1     0.5
...
-192540      2        0     0
-192540      2        1     1
...
-192540      3        0     0
-192540      3        1     1
...
-192541      1        0     0
-192541      1        1     0.5
...
-192541      2        0     0
-192541      2        1     1
...
-192541      3        0     0
-192541      3        1     1
...

यह काफी बड़ा डेटाफ़्रेम (7 कॉलम और ~ 600k पंक्तियाँ) है।

मैं क्या करना चाहता हूं: idbasin कॉलम (उदाहरण के लिए (1,2)) का जिक्र करने वाले मानों वाला एक टुपल दिया गया है, यदि idrun मान समान है

  1. निर्दिष्ट idbasin मानों के q कॉलम का योग करें, उदाहरण के लिए यह (1,2) होगा
  2. उस idrun मान और टपल-निर्दिष्ट idbasin मानों से संबंधित पंक्तियों को हटा दें
  3. टपल की पहली संख्या के बराबर idbasin के साथ सारांशित मान डालें।

मेरे उदाहरण df का जिक्र करते हुए, परिणाम होंगे

idrun    idbasin    time    q
-192540      1        0     0
-192540      1        1     1.5
...
-192540      3        0     0
-192540      3        1     1
...
-192541      1        0     0
-192541      1        1     1.5
...
-192541      3        0     0
-192541      3        1     1
...

मेरा समाधान df को df को dict में बदलने के लिए groupby का उपयोग करना होगा और फिर लूप के लिए एक या दो के साथ ऑपरेशन करना होगा, लेकिन मैं समझता हूं कि पांडा में पुनरावृत्ति इष्टतम समाधान नहीं है, इसलिए मेरा मानना ​​है कि df का उपयोग करके "पांडा" समाधान हो सकता है।

0
brodegon 1 अक्टूबर 2021, 13:04

1 उत्तर

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

आप Series.mask और फिर समग्र sum:

tup = (1, 2)

df['idbasin'] = df['idbasin'].mask(df['idbasin'].isin(tup), tup[0])
#alternative
#df['idbasin'] = np.where(df['idbasin'].isin(tup), tup[0], df['idbasin'])
df = df.groupby(['idrun', 'idbasin','time'], as_index=False)['q'].sum()
print (df)
    idrun  idbasin  time    q
0 -192541        1     0  0.0
1 -192541        1     1  1.5
2 -192541        3     0  0.0
3 -192541        3     1  1.0
4 -192540        1     0  0.0
5 -192540        1     1  1.5
6 -192540        3     0  0.0
7 -192540        3     1  1.0
1
jezrael 1 अक्टूबर 2021, 13:26
एक दम बढ़िया। धन्यवाद!
 – 
brodegon
1 अक्टूबर 2021, 14:19