给出以下熊猫df:
import pandas as pd
df = pd.DataFrame({'1' : ['title1','R','R','R'],
'2' : ["title2", "NR" ,"NR", "NR"],
'3' : ["title3", "R" , "NR", "NR"],
'4' : ["title4", "R", "NR", "R"]})
以及更长的字符串列表:
List = ['2633', 'title1', '3327', 'title2', '18', 'title3', '5', 'title4', '5835', 'title5', '394', 'title6']
在python环境中,是否有可能将df中的标题替换为字符串列表中每个对标题之前的数字。
预期输出:
dfnew = pd.DataFrame({'1' : ['2633','R','R','R'],
'2' : ["3327", "NR" ,"NR", "NR"],
'3' : ["28", "R" , "NR", "NR"],
'4' : ["5", "R", "NR", "R"]})
dfnew
1 2 3 4
0 2633 3327 28 5
1 R NR R R
2 R NR NR NR
3 R NR NR R
我认为使用正则表达式可以解决问题,但我不知道如何从列表中访问正确的数字。
感谢您的提前帮助!
答案 0 :(得分:7)
根据偶数和奇数索引创建一个dict
作为键值对,并使用replace
将title
替换为numbers
:
d = {k:v for k,v in zip(List[1::2], List[::2])}
print(df.replace(d))
输出:
1 2 3 4
0 2633 3327 18 5
1 R NR R R
2 R NR NR NR
3 R NR NR R
说明
List[1::2]
将为您提供列表['title1', 'title2', 'title3', 'title4', 'title5', 'title6']
还有
List[::2]
将为您提供元素['2633', '3327', '18', '5', '5835', '394']
中的偶数索引
答案 1 :(得分:5)
我会做这样的事情:
import pandas as pd
df = pd.DataFrame({'1' : ['title1','R','R','R'],
'2' : ["title2", "NR" ,"NR", "NR"],
'3' : ["title3", "R" , "NR", "NR"],
'4' : ["title4", "R", "NR", "R"]})
List = ['2633', 'title1', '3327', 'title2', '18', 'title3', '5', 'title4', '5835', 'title5', '394', 'title6']
# mapping every title with its number
mydict = {}
for i in range(len(List)) :
if i %2 == 0 :
mydict[List[i+1]] = List[i]
print mydict
#>>>{'title1': '2633', 'title2': '3327', 'title3': '18', 'title4': '5', 'title5': '5835', 'title6': '394'}
for k in df :
title = df[k][0]
df[k][0] = mydict[title]
print df
#>>> 1 2 3 4
#>>>0 2633 3327 18 5
#>>>1 R NR R R
#>>>2 R NR NR NR
#>>>3 R NR NR R
答案 2 :(得分:-1)
List = [item.replace("title", "") for item in List]
输出:
['2633', '1', '3327', '2', '18', '3', '5', '4', '5835', '5', '394', '6']
如果要在DF上申请,只需按DF列切换列表