2017-07-26 87 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]是一个办法扭转一个字符串