pandas loc on str lower for column comparison

Piet van Oostrum piet-l at vanoostrum.org
Tue Sep 10 08:00:23 EDT 2019


Sayth Renshaw <flebber.crue at gmail.com> writes:

>> 
>> That actually creates another error.
>> 
>> A value is trying to be set on a copy of a slice from a DataFrame.
>> Try using .loc[row_indexer,col_indexer] = value instead
>> 
>> See the caveats in the documentation:
>> http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
>> 
>> So tried this
>> df['c'] = df.apply(lambda df1: df1['Current
>> Team'].str.lower().str.strip() == df1['New
>> Team'].str.lower().str.strip(), axis=1)
>> 
>> Based on this SO answer https://stackoverflow.com/a/46570641
>> 
>> Thoughts?
>> 
>> Sayth
>
> This works on an individual row
> df2 = df1.loc[(df1['Current Team'] == df1['New Team']),'D'] = 'Wow'
>
> But how do I apply it to the whole new column and return the new dataset?
>
> Trying to use lambda but it cannot contain assigment
> df2 = df1.apply(lambda df1: [ (df1['Current Team'] == df1['New Team'])  ]['D'] = 'succeed')
> df2
>
> Confused
>
> Sayth

df1['Difference'] = df1['Current Team'].str.lower().str.strip() ==
                    df1['New Team'].str.lower().str.strip()

works on whole columns, not only on an individual row.


xls = pd.ExcelFile("Melbourne.xlsx")
df = xls.parse('Sheet1', skiprows= 4)
df1 = df[['UID','Name','New Leader','Current Team', 'New Team']].copy()
df1['Difference'] = df1['Current Team'].str.lower().str.strip() == df1['New Team'].str.lower().str.strip()
print(df1.head())

-- 
Piet van Oostrum <piet-l at vanoostrum.org>
WWW: http://piet.vanoostrum.org/
PGP key: [8DAE142BE17999C4]



More information about the Python-list mailing list