Python 用单元格位置替换布尔数据框中的所有True
我有一个布尔数据框,希望用单元格的位置(作为元组)替换真正的单元格。例如:Python 用单元格位置替换布尔数据框中的所有True,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个布尔数据框,希望用单元格的位置(作为元组)替换真正的单元格。例如: import pandas as pd df = pd.DataFrame({'A': [True, False, False], 'B': [False, True, True]}) 我尝试了修改版本的df.mask(df,df.index)from(例如,尝试iloc),但没有成功。类似的东西 导入熊猫 df=1.DataFrame([ {“A”:正确,“B”:错误}, {“
import pandas as pd
df = pd.DataFrame({'A': [True, False, False],
'B': [False, True, True]})
我尝试了修改版本的df.mask(df,df.index)
from(例如,尝试iloc
),但没有成功。类似的东西
导入熊猫
df=1.DataFrame([
{“A”:正确,“B”:错误},
{“A”:假,“B”:真},
{“A”:假,“B”:真},
])
对于df.columns中的列:
对于df.loc中的索引[df[列]==True]。索引:
df.iloc[index,df.columns.get_loc(column)]=str((index,df.columns.get_loc(column)))
打印(df)
输出:
ab
0(0,0)假
1假(1,1)
2假(2,1)
让我们尝试堆叠
将数据帧重塑为序列,然后使用带loc
的布尔索引填充使用np.argwhere
获得的索引,最后使用取消堆叠
将其重塑回数据帧:
m = df.stack()
m.loc[m] = pd.Series(map(tuple, np.argwhere(df.to_numpy())), index=m[m].index)
out = m.unstack()
或者,您也可以尝试np.argwhere
获取索引,并使用iat
索引设置True
单元格中的值及其相应的索引:
out = df.astype(object)
for r, c in np.argwhere(df.to_numpy()):
out.iat[r, c] = (r, c)
结果:
print(out)
A B
0 (0, 0) False
1 False (1, 1)
2 False (2, 1)
我的错误,修复了答案这似乎有效。谢谢我正在进一步测试它。用
列表(df)
替换[“A”,“B”]
怎么样?为了更通用,您可以执行df.columns(不执行列表(df))