亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python - 交換多個數據幀中的值

Python - 交換多個數據幀中的值

嚕嚕噠 2021-07-20 17:01:45
我有一個像這樣的 DataFrameid  val1   val20    A      B1    B      B2    A      A3    A      A我想要交換值,例如:id  val1   val20    B      A1    A      A2    B      B3    B      B我需要考慮 df 可能有我想保持不變的其他列。
查看完整描述

3 回答

?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

您可以使用pd.DataFrame.applymap字典:


d = {'B': 'A', 'A': 'B'}


df = df.applymap(d.get).fillna(df)


print(df)


  id val1 val2

0  0    B    A

1  1    A    A

2  2    B    B

3  3    B    B

為了性能,特別是內存使用,您可能希望使用分類數據:


for col in df.columns[1:]:

    df[col] = df[col].astype('category')

    df[col] = df[col].cat.rename_categories(d)


查看完整回答
反對 回復 2021-07-28
?
DIEA

TA貢獻1820條經驗 獲得超3個贊

使用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 val2

0   0    B    A

1   1    A    A

2   2    B    B

3   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 val2

0   0    A    B

1   1    B    B

2   2    A    A

3   3    A    A


   id val1 val2

0   0    B    A

1   1    A    A

2   2    B    B

3   3    B    B

df = 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 val2

0   0    A    B

1   1    A    B

2   2    A    B

3   3    A    B


   id val1 val2

0   0    B    A

1   1    B    A

2   2    B    A

3   3    B    A

df = 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 val3

0   0    A    B    C

1   1    A    B    C

2   2    A    B    C

3   3    A    B    C


   id val1 val2 val3

0   0    B    C    A

1   1    B    C    A

2   2    B    C    A

3   3    B    C    A

df = 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 val3

0   0    A    B    C

1   1    B    C    D

2   2    C    D    A

3   3    D    A    B


   id val1 val2 val3

0   0    B    C    D

1   1    C    D    A

2   2    D    A    B

3   3    A    B    C


查看完整回答
反對 回復 2021-07-28
  • 3 回答
  • 0 關注
  • 185 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號