python - how to add new item in pandas series without erasing other items -
i have following pandas series.
new_orders_list out[853]: cluster 1 [525, 526, 533] cluster 2 [527, 528, 532] cluster 3 [519, 534, 535] cluster 4 [530] cluster 5 [529, 531] cluster 6 [520, 521, 524]
and,i have 2 more series after slicing on dataframe.
condition out[854]: 5 525 name: order_id, dtype: object condition2 out[855]: clusters cluster 6 1 name: quant_bought, dtype: int64
now want add value of condition
series 525 new_orders_list
@ cluster 6
(index condition2 series)
location. , erasing off 525
cluster 1
location. so, should this
cluster 1 [526, 533] cluster 2 [527, 528, 532] cluster 3 [519, 534, 535] cluster 4 [530] cluster 5 [529, 531] cluster 6 [520, 521, 524, 525]
i doing following in python. appends stored values.
new_orders_list.append(pd.series(condition.values ,index = condition2.index)) cluster 1 [525, 526, 533] cluster 2 [527, 528, 532] cluster 3 [519, 534, 535] cluster 4 [530] cluster 5 [529, 531] cluster 6 [520, 521, 524] cluster 6 525
you can try solution.
new series of remove data created , called remseries
.
types of values in lists
in series
new_orders_list
integers , types of other series
strings
, values converted strings.
then selected rows subsets isin
, values added , removed.
print new_orders_list clusters cluster 1 [525, 526, 533] cluster 2 [527, 528, 532] cluster 3 [519, 534, 535] cluster 4 [530] cluster 5 [529, 531] cluster 6 [520, 521, 524] name: no, dtype: object print condition 5 525 name: order_id, dtype: object print condition2 clusters cluster 6 1 name: quant_bought, dtype: int64 #create new series remove remseries = pd.series(condition.values, index = ['cluster 1'], name='rem') print remseries cluster 1 525 name: rem, dtype: object
#create dataframe series df = new_orders_list.reset_index() print df clusters no 0 cluster 1 [525, 526, 533] 1 cluster 2 [527, 528, 532] 2 cluster 3 [519, 534, 535] 3 cluster 4 [530] 4 cluster 5 [529, 531] 5 cluster 6 [520, 521, 524] #convert values in list int string df['no'] = df['no'].apply(lambda x: [str(i) in x]) #add , remove items df.loc[df['clusters'].isin(condition2.index.tolist()), 'no'] = df['no'].apply(lambda x: x + condition.values.tolist()) df.loc[df['clusters'].isin(remseries.index.tolist()), 'no'] = df['no'].apply(lambda x: [k k in x if k != ''.join(remseries.values)]) #check types of values in list print [ type(x) x in df['no'][0]] [<type 'str'>, <type 'str'>] #convert values in list string int df['no'] = df['no'].apply(lambda x: [int(i) in x])
print df clusters no 0 cluster 1 [526, 533] 1 cluster 2 [527, 528, 532] 2 cluster 3 [519, 534, 535] 3 cluster 4 [530] 4 cluster 5 [529, 531] 5 cluster 6 [520, 521, 524, 525] #check types of values in list print [ type(x) x in df['no'][0]] [<type 'int'>, <type 'int'>]
Comments
Post a Comment