鉴于以下熊猫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:
这是上面文章中的df2:
最佳答案
使用np.where
和replace
:
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/