मेरे पास इस तरह एक डेटाफ्रेम है

>>> df = pd.DataFrame([100, 150, 150, 103])
>>> df
     0
0  100
1  150
2  150
3  103
>>> 

मैं यह जांचना चाहता हूं कि अगला मान +10% से कम है या पिछले मान का -10% है, यदि अगले मान को पिछले मान से प्रतिस्थापित नहीं किया गया है

यह वांछित परिणाम है

     0
0  100
1  100
2  100
3  103

मैंने "कहां" का उपयोग करने की कोशिश की, लेकिन यह ठीक से काम नहीं करता है

>>> df.where(abs(df / df.shift()-1) < 0.1, df.shift().fillna(method='bfill'), inplace=True)
>>> df
     0
0  100
1  100
2  150
3  150

मैं कैसे हल कर सकता हूँ?

1
dan577 21 जून 2018, 12:36

1 उत्तर

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

यह pd.Series.iteritems.

df = pd.DataFrame([100, 150, 150, 103])

res = np.zeros(len(df[0]))
res[0] = df[0].iloc[0]

for idx, val in df[0].iloc[1:].iteritems():
    if abs(val / res[idx-1] - 1) < 0.1:
        res[idx] = val
    else:
        res[idx] = res[idx-1]

df[1] = res.astype(int)

print(df)

     0    1
0  100  100
1  150  100
2  150  100
3  103  103
0
jpp 21 जून 2018, 13:03