पायथन में एक समाधान की तलाश में जैसा कि यहां चर्चा की गई है R: Sum to 0 पहुँच गया है और फिर पुनः आरंभ करें
मेरे पास एक समान डेटाफ़्रेम है और मैं एप्लायंस कॉलम में मूल्यों का संचयी योग चाहता हूं जब रन कॉलम में मान 0 होता है और जब रन कॉलम में मान 0 से 1 में बदल जाता है तो गिनती को शून्य पर रीसेट कर देता है।
Home Date Time Appliance Run
2 1/21/2017 1:30:00 100 1
2 1/21/2017 1:45:00 207 1
2 1/21/2017 2:00:00 310 1
2 1/21/2017 2:15:00 450 1
2 1/21/2017 2:30:00 804 0
2 1/21/2017 2:45:00 556 0
2 1/21/2017 3:00:00 844 0
2 1/21/2017 3:15:00 396 0
2 1/21/2017 3:30:00 392 0
2 1/21/2017 3:45:00 1220 0
2 1/21/2017 4:00:00 455 1
2 1/21/2017 4:15:00 550 1
2 1/21/2017 4:30:00 600 1
2 1/21/2017 4:45:00 809 1
2 1/22/2017 3:30:00 609 1
2 1/22/2017 3:45:00 244 0
2 1/22/2017 4:00:00 1068 0
2 1/22/2017 4:15:00 44 0
2 1/22/2017 4:30:00 1240 0
2 1/22/2017 4:45:00 40 0
2 1/22/2017 5:00:00 1608 0
2 1/22/2017 5:15:00 0 1
2 1/22/2017 5:30:00 0 1
मैंने नीचे दिए गए कोड की कोशिश की है। लेकिन यह सिर्फ पिछली पंक्ति मान जोड़ता है और संचयी योग नहीं करता है
newcum = []
lastvalue = 0
for i, row in df.iterrows():
if df['Run'][i+1] == 0 :
lastvalue += x['Appliance'][i]
else:
lastvalue = 0
newcum.append(lastvalue)
df['value'] = newcum
मेरा वांछित आउटपुट वैल्यू कॉलम में निम्नानुसार है:
Home Date Time Appliance Run value
2 1/21/2017 1:30:00 100 1 0
2 1/21/2017 1:45:00 207 1 0
2 1/21/2017 2:00:00 310 1 0
2 1/21/2017 2:15:00 450 1 0
2 1/21/2017 2:30:00 804 0 804
2 1/21/2017 2:45:00 556 0 1360
2 1/21/2017 3:00:00 844 0 2204
2 1/21/2017 3:15:00 396 0 2600
2 1/21/2017 3:30:00 392 0 2992
2 1/21/2017 3:45:00 1220 0 4212
2 1/21/2017 4:00:00 455 1 0
2 1/21/2017 4:15:00 550 1 0
2 1/21/2017 4:30:00 600 1 0
2 1/21/2017 4:45:00 809 1 0
2 1/22/2017 3:30:00 609 1 0
2 1/22/2017 3:45:00 244 0 244
2 1/22/2017 4:00:00 1068 0 1312
2 1/22/2017 4:15:00 44 0 1356
2 1/22/2017 4:30:00 1240 0 2596
2 1/22/2017 4:45:00 40 0 2636
2 1/22/2017 5:00:00 1608 0 4244
2 1/22/2017 5:15:00 0 1 0
2 1/22/2017 5:30:00 0 1 0
क्या कोई इसमें मेरी मदद कर सकता है?
2 जवाब
हम उपकरण के लिए फ़िल्टर कर सकते हैं, और groupby
कुंजी की गणना cumsum
के साथ कर सकते हैं, ध्यान दें कि जब उपकरण 0 है तो कमसम में वृद्धि नहीं होगी और इसे नंबर 1 से विभाजित किया गया था।
df['new'] = df.loc[df['Run'].eq(0)].groupby(df['Run'].cumsum())['Appliance'].cumsum()
df['new'].fillna(0,inplace=True)
df
Out[78]:
Home Date Time Appliance Run new
0 2 1/21/2017 1:30:00 100 1 0.0
1 2 1/21/2017 1:45:00 207 1 0.0
2 2 1/21/2017 2:00:00 310 1 0.0
3 2 1/21/2017 2:15:00 450 1 0.0
4 2 1/21/2017 2:30:00 804 0 804.0
5 2 1/21/2017 2:45:00 556 0 1360.0
6 2 1/21/2017 3:00:00 844 0 2204.0
7 2 1/21/2017 3:15:00 396 0 2600.0
8 2 1/21/2017 3:30:00 392 0 2992.0
9 2 1/21/2017 3:45:00 1220 0 4212.0
10 2 1/21/2017 4:00:00 455 1 0.0
11 2 1/21/2017 4:15:00 550 1 0.0
12 2 1/21/2017 4:30:00 600 1 0.0
13 2 1/21/2017 4:45:00 809 1 0.0
14 2 1/22/2017 3:30:00 609 1 0.0
15 2 1/22/2017 3:45:00 244 0 244.0
16 2 1/22/2017 4:00:00 1068 0 1312.0
17 2 1/22/2017 4:15:00 44 0 1356.0
18 2 1/22/2017 4:30:00 1240 0 2596.0
19 2 1/22/2017 4:45:00 40 0 2636.0
20 2 1/22/2017 5:00:00 1608 0 4244.0
21 2 1/22/2017 5:15:00 0 1 0.0
22 2 1/22/2017 5:30:00 0 1 0.0
fillna
: df.loc[df['Run'].eq(0)].groupby(df['Run'].cumsum())['Appliance'].cumsum().reindex(df.index, fill_value=0)
से बचने के लिए आप दूसरे कमसम के बाद reindex
जोड़ सकते हैं
आप इस तरह से समूह के लिए एक लेबल उत्पन्न कर सकते हैं:
label = (df.Run.diff().fillna(df.Run.iloc[0]) == 1).cumsum()
अब आप प्रत्येक समूह का समूह और योग कर सकते हैं:
df.value = (df.Appliance * (1 - df.Run)).groupby(label).cumsum()
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।
Rub
नाम का कोई कॉलम नहीं है। कृपया अपना न्यूनतम प्रतिलिपि प्रस्तुत करने योग्य उदाहरण ठीक करेंRub
। या तो दिखाया गया कोड नहीं चलाया गया था, या इसे सही ढंग से कॉपी-पेस्ट नहीं किया गया था। किसी भी तरह से, मैं परिणामों पर भरोसा नहीं कर सकता।