2017-07-26 88 views
2

我有以下數據框。熊貓子集數據框中的反向字符串列

ID LOC Alice Bob Karen 
0 1 CH 9|5 6|3 4|4 
1 2 ES 1|1 0|8 2|0 
2 3 DE 2|4 6|6 3|1 
3 4 ES 3|9 1|2 4|2 

Alice和Bob列包含字符串值。我想在這些列中以另一列的值爲條件反轉這些列中的字符串。例如,在LOC == ES,在相應的列扭轉字符串看起來像:

ID LOC Alice Bob Karen 
0 1 CH 9|5 6|3 4|4 
1 2 ES 1|1 8|0 0|2 
2 3 DE 2|4 6|6 3|1 
3 4 ES 9|3 2|1 2|4 

是否有與數千行的CSV文件執行所有匹配行此操作的快捷方式?

謝謝。

+1

你想要的數據集相矛盾你的描述,你能澄清一下你是否想在Karen列中反轉字符串嗎? – MaxU

+1

這只是愛麗絲和鮑勃?還是卡倫呢? –

回答

2

使用df.loc讓你排片,然後應用串逆轉的AliceBob[::-1]操作與df.applymap

In [533]: df.loc[df['LOC'] == 'ES', ['Alice', 'Bob']] = \ 
       df.loc[df['LOC'] == 'ES', ['Alice', 'Bob']].applymap(lambda x: x[::-1]) 

In [534]: df 
Out[534]: 
    ID LOC Alice Bob Karen 
0 1 CH 9|5 6|3 4|4 
1 2 ES 1|1 8|0 2|0 
2 3 DE 2|4 6|6 3|1 
3 4 ES 9|3 2|1 4|2 
3
#cols = ['Alice','Bob'] 
In [17]: cols = df.columns.drop(['ID','LOC']) 

In [18]: df.loc[df.LOC=='ES', cols] = df.loc[df.LOC=='ES', cols].apply(lambda x: x.str[::-1]) 

In [19]: df 
Out[19]: 
    ID LOC Alice Bob Karen 
0 1 CH 9|5 6|3 4|4 
1 2 ES 1|1 8|0 0|2 
2 3 DE 2|4 6|6 3|1 
3 4 ES 9|3 2|1 2|4 
+0

Psst ...不確定'Karen'應該顛倒;) –

+0

@cᴏʟᴅsᴘᴇᴇᴅ,我會說是,當我看到OP的期望數據集... – MaxU

2

你可以嘗試使用.apply()您例如條件如下,其中列LOC == 'ES':在我的答案

df['Alice'] = df[['LOC','Alice']].apply(lambda x: x['Alice'][::-1] if x['LOC'] == 'ES' else x['Alice'], axis=1) 

注意[::-1]是一個辦法扭轉一個字符串