pandas 子集数据框中的反向字符串列
Reverse string columns in a pandas subset dataframe
我有以下数据框。
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 文件中的所有匹配行执行此操作?
谢谢。
#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
使用 df.loc
获取行切片,然后使用 df.applymap
在 Alice
和 Bob
列上应用字符串反向 [::-1]
操作。
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
您可以尝试使用 .apply()
作为示例条件,其中列 LOC == 'ES'
:
df['Alice'] = df[['LOC','Alice']].apply(lambda x: x['Alice'][::-1] if x['LOC'] == 'ES' else x['Alice'], axis=1)
请注意,在我的回答中,[::-1]
是一种反转字符串的方法
我有以下数据框。
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 文件中的所有匹配行执行此操作?
谢谢。
#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
使用 df.loc
获取行切片,然后使用 df.applymap
在 Alice
和 Bob
列上应用字符串反向 [::-1]
操作。
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
您可以尝试使用 .apply()
作为示例条件,其中列 LOC == 'ES'
:
df['Alice'] = df[['LOC','Alice']].apply(lambda x: x['Alice'][::-1] if x['LOC'] == 'ES' else x['Alice'], axis=1)
请注意,在我的回答中,[::-1]
是一种反转字符串的方法