Dataframe ma

Segment | zmiana procentowa

Segment1 |. 25%

Segment2 |. 30%

Segment3 |. 40%

Muszę stworzyć zdanie na TOP 3:

"Segment3 ma najwyższą wartość procentową 40%"

"Segment2 ma drugą najwyższą wartość procentową 30%"

"Segment1 ma 3 największa zmiana procentowa 25%" "segment 1 ma 5% więcej zmian niż segment 2" "Segment 2 ma 10% więcej zmian niż segment 3"

Wszystkie te zdanie zostaną dodane jako każda wartość komórki w nowej dataframe. Dzięki za pomoc !!

1
learningtocode 8 październik 2020, 07:49

1 odpowiedź

Najlepsza odpowiedź

Posługiwać się:

#converted column with percentage to numeric
df['num'] = df['percentage_change'].str.rstrip('%').astype(float)
#get 3top rows by numeric column
df1 = df.nlargest(3, 'num')
#create difference column converted to strings
df1['diff'] = df1['num'].diff(-1).fillna(0).astype(str).str.replace('\.[0]*','') + '%'
#shifting segment column
df1['diff_seg'] = df1['segment'].shift(-1)
#default index strating by 1
df1 = df1.reset_index(drop=True)
df1.index = df1.index + 1
print (df1)
    segment percentage_change   num diff  diff_seg
1  segment3               40%  40.0  10%  segment2
2  segment2               30%  30.0   5%  segment1
3  segment1               25%  25.0   0%       NaN

Następnie jest używany f-string s do sformatowania nowych kolumn:

f1 = lambda x: f'{x["segment"].title()} has {x.name}. highest percentage change of {x["percentage_change"]}'
f2 = lambda x: f'{x["diff_seg"].title()} has {x["diff"]} more change than {x["segment"]}'
df1['out'] = df1.apply(f1, axis=1)
df1['out1'] = df1.iloc[:-1].apply(f2, axis=1)
print (df1)
    segment percentage_change   num diff  diff_seg  \
1  segment3               40%  40.0  10%  segment2   
2  segment2               30%  30.0   5%  segment1   
3  segment1               25%  25.0   0%       NaN   

                                                out  \
1  Segment3 has 1. highest percentage change of 40%   
2  Segment2 has 2. highest percentage change of 30%   
3  Segment1 has 3. highest percentage change of 25%   

                                         out1  
1  Segment2 has 10% more change than segment3  
2   Segment1 has 5% more change than segment2  
3                                         NaN  
0
jezrael 8 październik 2020, 05:44