繁体   English   中英

Pandas df 交换列值

[英]Pandas df swap column value

我有 dataframe 的列有 2 个值:好和坏。

我想知道是否有办法可以交换它们。 例如,只要值是好的,就应该将其更改为坏的,反之亦然。 有没有办法交换值?

编辑:我想在 for 循环之后交换某些索引的值。 例子:

 for i in np.arange(0,len(df)-1):
     if(df.loc[i,'othercolumnname']>=100:
      # swap the values here

使用map怎么样:

import pandas as pd

df = pd.DataFrame({'x': ['good', 'bad', 'bad', 'good']})
print(df)
df['x'] = df.x.map({'good': 'bad', 'bad': 'good'})
print(df)
      x           x
0  good     0   bad
1   bad  →  1  good
2   bad     2  good
3  good     3   bad

您可以只使用pandas function replace它可以进行类似字典的替换。

df.replace({'YourColumnName': {'good': 'bad',  
                               'bad': 'good'}})

您可以使用replace来实现此目的...

df = pd.DataFrame({'A': ["good", "good", "bad", "bad", "good"],
                   'B': [5, 6, 7, 8, 9],
                   'C': ['a', 'b', 'c', 'd', 'e'],
                   'D': ["good", "good", "bad", "bad", "good"],})


print(df.replace({'A': {"good": "bad", "bad": "good"}}))

这将仅限于A列。 如果您想要所有列,您可以在替换中取消嵌套字典。 并通过{"good": "bad", "bad": "good"}

使用np.where和 @j1-lee 的 dataframe:

import numpy as np

df = pd.DataFrame({'x': ['good', 'bad', 'bad', 'good']})
df['y'] = np.where(df['x'].eq('good'),'bad','good')

      x     y
0  good   bad
1   bad  good
2   bad  good
3  good   bad

这是一个可以按预期对两个唯一值起作用的技巧:

df['x'].replace({k: v for k, v in zip(df['x'].unique(), df['x'].unique()[::-1])})

Output:

>>> df
      x
0  good
1   bad
2   bad
3  good

>>> df['x'] = df['x'].replace({k: v for k, v in zip(df['x'].unique(), df['x'].unique()[::-1])})
>>> df
0     bad
1    good
2    good
3     bad

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM