我的資料框列有 2 個值:好和壞。
我想知道是否有辦法交換它們。例如,只要值好就應該改為壞,反之亦然。有沒有辦法交換值?
編輯:我想在 for 回圈后交換某些索引的值。例子:
for i in np.arange(0,len(df)-1):
if(df.loc[i,'othercolumnname']>=100:
# swap the values here
uj5u.com熱心網友回復:
如何使用Series.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
對于問題的編輯部分,您可以組合Series.map和Series.where:
import pandas as pd
df = pd.DataFrame({'x': ['good', 'bad', 'bad', 'good'], 'y': [100, 0, 100, 0]})
print(df)
df['x'] = df.x.map({'good': 'bad', 'bad': 'good'}).where(df.y >= 100, df.x)
print(df)
這個想法是全域交換值(使用map),然后恢復(使用where)到x條件df.y >= 100為的原始值False。
或者,您可以使用DataFrame.apply:
swap = {'good': 'bad', 'bad': 'good'}
df['x'] = df.apply(lambda row: swap[row.x] if row.y >= 100 else row.x, axis=1)
x y x y
0 good 100 0 bad 100
1 bad 0 → 1 bad 0
2 bad 100 2 good 100
3 good 0 3 good 0
uj5u.com熱心網友回復:
您可以只使用可以進行類似 dict 替換的pandas函式replace。
df.replace({'YourColumnName': {'good': 'bad',
'bad': 'good'}})
uj5u.com熱心網友回復:
你可以用它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"}}))
這將僅限于 column A。如果您想要所有列,您可以在替換中取消嵌套字典。然后通過{"good": "bad", "bad": "good"}
uj5u.com熱心網友回復:
使用np.where和@j1-lee 的資料框:
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
uj5u.com熱心網友回復:
這是一個對兩個唯一值按預期作業的技巧:
df['x'].replace({k: v for k, v in zip(df['x'].unique(), df['x'].unique()[::-1])})
輸出:
>>> 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/366341.html
