鉴于以下熊猫df:

import pandas as pd


df = pd.DataFrame({'1676' : ['R','NR','R','NR'],
               '1677' : ["NR", "NR" ,"NR", "NR"],
               '1710' : ["R", "R" , "NR", "NR"],
               '1536' : ["NR", "R", "NR", "R"]})

df
    1676    1677    1710    1536
0   R       NR      R       NR
1   NR      NR      R       R
2   R       NR      NR      NR
3   NR      NR      NR      R


而这个更长的熊猫df2:

df2 = pd.DataFrame({'1' : ['1710','1676','2651','1676'],
               '2' : ["2654", "2824" ,"1676", "1677"],
               '3' : ["1676", "3079" , "1677", "2085"],
               '4' : ["1536", "1677", "1409", "1536"],
                  '5' : ["510", "1710" , "1664", "1710"],
                  '6' : ["2590", "3090" , "2252", "2916"],
                  '7' : ["2777", "1536" , "1710", "3140"],
                  '8' : ["1677", "1709" , "1536", "1963"]})

    1       2       3       4       5       6       7       8
0   1710    2654    1676    1536    510     2590    2777    1677
1   1676    2824    3079    1677    1710    3090    1536    1709
2   2651    1676    1677    1409    1664    2252    1710    1536
3   1676    1677    2085    1536    1710    2916    3140    1963


我想知道以下行是否可能(这里是第一行):


对于df.loc[0,] = "R"中的每个值
取相应的列名(数字)
df2.loc[0,]中搜索号码
df2.loc[0,]替换"R"中的数字


这样我得到了:

    1       2       3       4       5       6       7       8
0   R       2654    R       1536    510     2590    2777    1677
1   1676    2824    3079    1677    R       3090    R       1709
2   2651    R       1677    1409    1664    2252    1710    1536
3   1676    1677    2085    R       1710    2916    3140    1963


编辑:

它不适用于我的特定df。猜猜是什么触发了这个问题?我已经尝试过重置索引。

这是上面帖子中的df:

regex - 有条件替换数字df中的数字-LMLPHP

这是上面文章中的df2:

regex - 有条件替换数字df中的数字-LMLPHP

最佳答案

使用np.wherereplace

import numpy as np
r, c = np.where(df=='R')

df2.apply(lambda x: x.replace(df.columns[c[(r == x.name)]], 'R'), axis=1)


输出:

      1     2     3     4     5     6     7     8
0     R  2654     R  1536   510  2590  2777  1677
1  1676  2824  3079  1677     R  3090     R  1709
2  2651     R  1677  1409  1664  2252  1710  1536
3  1676  1677  2085     R  1710  2916  3140  1963


细节:


首先,找出df中等于“ R”的行和列
使用轴数= 1的apply逐行执行,x.name标识哪一行
索引查找C中等于行索引的位置并得到
df中该位置的列标题。
使用replace替换df中列标题的所有值
行。

关于regex - 有条件替换数字df中的数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55525427/

10-12 22:02
查看更多