मैंने पांडा श्रृंखला की एक सूची बनाई है, जिसमें प्रत्येक श्रृंखला 1 और 100 के बीच की संख्याओं द्वारा अनुक्रमित है

Index    Value
1        62.99
4        64.39
37       75.225
65       88.12
74       89.89
79       93.30
88       94.30
92       95.83
100      100.00

मैं क्या करना चाहता हूं, या तो यह एक श्रृंखला है, या उस पर .to_numpy() को कॉल करने के बाद एक सरणी के रूप में, इसे भरना है ताकि मेरी श्रृंखला में 100 मान (1 से 100) हों, जिसमें कोई भी नई प्रविष्टियां हों पिछला मौजूदा मान यानी

Index    Value
1        62.99
2        62.99
3        62.99
4        64.39
5        64.39
6        64.39
...
...
36       64.39
37       75.225
38       75.225

और इसी तरह।

मैं प्रत्येक श्रृंखला के माध्यम से पुनरावृत्ति करके और मूल्य में बदलाव की जांच करके प्रोग्रामेटिक रूप से लंबे समय तक चलने वाला तरीका कर सकता हूं; मेरा प्रश्न है, क्या Series.repeat() का एक संस्करण है जो इसे एक हिट में कर सकता है, या एक numpy फ़ंक्शन जो मेरे सरणी को मेरे 100 मानों के साथ इस तरीके से 'पैड आउट' कर सकता है?

पढ़ने के लिए और किसी भी सुझाव के लिए अग्रिम धन्यवाद। यह होमवर्क नहीं है; यह एक वास्तविक प्रश्न है इसलिए कृपया मुझ पर हमला न करें यदि मेरी पूछने की शैली आपकी अपेक्षा के अनुरूप नहीं है।

1
piemashandgravy 25 जून 2020, 12:40
df.reindex(range(df.index.min(), df.index.max() + 1), method="pad") ?
 – 
sammywemmy
25 जून 2020, 12:50
सैमीवेमी, जिसने इसे पूरी तरह से भुनाया - धन्यवाद!
 – 
piemashandgravy
25 जून 2020, 13:10

2 जवाब

आपको जो करने की ज़रूरत है वह एक श्रृंखला में मानों को आगे बढ़ाना है: यह कोड

series = pd.Series([33.2, 36, 39, 55], index=[3, 6, 12, 14], name='series')

indices = range(100)
df = pd.DataFrame(indices)

series = df.join(series).ffill()['series']

का उत्पादन

0      NaN
1      NaN
2      NaN
3     33.2
4     33.2
      ... 
95    55.0
96    55.0
97    55.0
98    55.0
99    55.0

पहला मान NaN है क्योंकि श्रृंखला में उन्हें भरने के लिए कोई मान नहीं है

0
dberezin 25 जून 2020, 13:18
धन्यवाद डबेरेज़िन, यह भी एक इलाज करता है। ffill() और bfill() के बारे में भी जानना वाकई उपयोगी है। अत्यधिक सराहना की!
 – 
piemashandgravy
26 जून 2020, 09:22

तो यहाँ वह समाधान है जिसके साथ मैं गया - एक ffill () फिलना (0) के साथ, रेंज में शामिल होना (1,101)। मुझे एक बड़े डेटासेट के माध्यम से पुनरावृति करनी पड़ी, जिसे पहले आईडी द्वारा समूहीकरण की आवश्यकता थी / अधिकतम 'पीसीटी' प्रति 'बाल्टी' लेना: -

j=df[['ID','Bucket','Pct']].groupby(['ID','Bucket']).max()
for i in df['ID'].unique():
    index=pd.DataFrame(range(1,101))
    index.columns=['Bucket']
    k=pd.merge(index,j.loc[i],how='left',on='Bucket').ffill().fillna(0)


In:
Bucket  Pct
3       0.03
3       0.1
3       0.26
3       0.42
3       0.45
3       0.59
3       0.69
3       0.83
3       0.86
3       0.91
3       0.94
3       0.98
4       1.1
...       ...
91      98.89
93      99.08
94      99.17
94      99.26
94      99.43
94      99.48
94      99.63
100     100.0

Out:
Bucket  Pct
1       0.00
2       0.00
3       0.98
4       1.83
5       22.83
...     ...
91      98.89
92      98.89
93      99.08
94      99.63
95      99.63
96      99.63
97      99.63
98      99.63
99      99.63
100     100.00

आप दोनों को एक बार फिर से बहुत बहुत धन्यवाद!

0
piemashandgravy 26 जून 2020, 14:30