Python - 交换多个数据帧中的值

我有一个像这样的 DataFrame


id  val1   val2

0    A      B

1    B      B

2    A      A

3    A      A

我想要交换值,例如:


id  val1   val2

0    B      A

1    A      A

2    B      B

3    B      B

我需要考虑 df 可能有我想保持不变的其他列。


噜噜哒
浏览 147回答 3
3回答

幕布斯7119047

您可以使用pd.DataFrame.applymap字典:d = {'B': 'A', 'A': 'B'}df = df.applymap(d.get).fillna(df)print(df)  id val1 val20  0    B    A1  1    A    A2  2    B    B3  3    B    B为了性能,特别是内存使用,您可能希望使用分类数据:for col in df.columns[1:]:    df[col] = df[col].astype('category')    df[col] = df[col].cat.rename_categories(d)

DIEA

使用factorize并滚动相应的值def swaparoo(col):  i, r = col.factorize()  return pd.Series(r[(i + 1) % len(r)], col.index)df[['id']].join(df[['val1', 'val2']].apply(swaparoo))   id val1 val20   0    B    A1   1    A    A2   2    B    B3   3    B    B替代体操使用相同的功能。这将整个数据帧合并到分解中。df.set_index('id').stack().pipe(swaparoo).unstack().reset_index()例子df = pd.DataFrame(dict(id=range(4), val1=[*'ABAA'], val2=[*'BBAA']))print(    df,    df.set_index('id').stack().pipe(swaparoo).unstack().reset_index(),    sep='\n\n')   id val1 val20   0    A    B1   1    B    B2   2    A    A3   3    A    A   id val1 val20   0    B    A1   1    A    A2   2    B    B3   3    B    Bdf = pd.DataFrame(dict(id=range(4), val1=[*'AAAA'], val2=[*'BBBB']))print(    df,    df.set_index('id').stack().pipe(swaparoo).unstack().reset_index(),    sep='\n\n')   id val1 val20   0    A    B1   1    A    B2   2    A    B3   3    A    B   id val1 val20   0    B    A1   1    B    A2   2    B    A3   3    B    Adf = pd.DataFrame(dict(id=range(4), val1=[*'AAAA'], val2=[*'BBBB'], val3=[*'CCCC']))print(    df,    df.set_index('id').stack().pipe(swaparoo).unstack().reset_index(),    sep='\n\n')   id val1 val2 val30   0    A    B    C1   1    A    B    C2   2    A    B    C3   3    A    B    C   id val1 val2 val30   0    B    C    A1   1    B    C    A2   2    B    C    A3   3    B    C    Adf = pd.DataFrame(dict(id=range(4), val1=[*'ABCD'], val2=[*'BCDA'], val3=[*'CDAB']))print(    df,    df.set_index('id').stack().pipe(swaparoo).unstack().reset_index(),    sep='\n\n')   id val1 val2 val30   0    A    B    C1   1    B    C    D2   2    C    D    A3   3    D    A    B   id val1 val2 val30   0    B    C    D1   1    C    D    A2   2    D    A    B3   3    A    B    C
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python