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))