如何在前列的特定列中查找和查找值,并将其值放入 Pandas 中的新列中
how to lookup and find a value in a specific column in column precedent and put its value in a new column in Pandas
我想在 pandas 中执行类似 Vlookup 的操作,我有一个两列数据框,需要检查第二列值 (B) 在第一列 (A) 中是否有效,如果是则相关行和要插入名为 C 的新列中的第二列值,下面是示例 table:
原始数据框是:
A B
a -
b a
c a
d b
e d
首选数据框将是:
A B C
a - N/A
b a -
c a -
d b a
e d b
实际上我是 python 的初学者,但在 excel 这可以通过 A 列和 B 列之间的 Vlookup 轻松完成,结果将在 C 列中恢复。
下面是我写的代码,但它不完整而且不起作用:
import pandas as pd
excel_file ='D:\Test\Test.xlsx'
data=pd.read_excel(excel_file, sheet_name= 0)
df=pd.DataFrame(data,columns=['A','B'])
lr = df.index.values.astype(int)[-1]
for j in range(0,2):
for i in range(1,lr):
C = []
row=0
for i in df.iloc[:,1]:
df["C"]=df.iloc[:,0].str.match(i)
if i == "-":
C[row]=C.append(i)
row+=1
elif df.at[i,['Index']]:
idx = next(iter(df[df['Index'] == True].index), 'no match')
df.at[i,"C"]=df.iloc[idx,1]
print(df)
如果我没记错的话,只要匹配此值,VLOOKUP 就会取一个值(比如“a”)和 returns 另一列(比如“B”列)中的值:VLOOKUP("a", A:A, 2)
如果这是您想要的,您可以创建一个新的(空)列,然后用正确的值填充正确的行,例如:
# Create a new column named C
df["C"] = None
# Fill the cells in C for which the column A matches the condition =="a"
df.loc[df["A"] == "a", "C"] = df.loc[df["A"] == "a", "B"]
您可以使用 np.where
填充 C
,然后使用 A
和 B
的字典映射 C
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': {0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e'},
'B': {0: '-', 1: 'a', 2: 'a', 3: 'b', 4: 'd'}})
df['C'] = np.where(df['B'].isin(df['A'].values), df['B'], np.nan)
df['C'] = df['C'].map(dict(zip(df.A.values, df.B.values)))
使用列表推导式进行 Vlookup
list1=['a','b','c','d','e']
list2=[np.empty,'a','a','b','d']
df=pd.DataFrame({'A':list1,'B':list2})
df['C']=[df.loc[df['A']==x,'B'].values if x in df['A'].values else '' for x in df['B']]
我想在 pandas 中执行类似 Vlookup 的操作,我有一个两列数据框,需要检查第二列值 (B) 在第一列 (A) 中是否有效,如果是则相关行和要插入名为 C 的新列中的第二列值,下面是示例 table:
原始数据框是:
A B
a -
b a
c a
d b
e d
首选数据框将是:
A B C
a - N/A
b a -
c a -
d b a
e d b
实际上我是 python 的初学者,但在 excel 这可以通过 A 列和 B 列之间的 Vlookup 轻松完成,结果将在 C 列中恢复。
下面是我写的代码,但它不完整而且不起作用:
import pandas as pd
excel_file ='D:\Test\Test.xlsx'
data=pd.read_excel(excel_file, sheet_name= 0)
df=pd.DataFrame(data,columns=['A','B'])
lr = df.index.values.astype(int)[-1]
for j in range(0,2):
for i in range(1,lr):
C = []
row=0
for i in df.iloc[:,1]:
df["C"]=df.iloc[:,0].str.match(i)
if i == "-":
C[row]=C.append(i)
row+=1
elif df.at[i,['Index']]:
idx = next(iter(df[df['Index'] == True].index), 'no match')
df.at[i,"C"]=df.iloc[idx,1]
print(df)
如果我没记错的话,只要匹配此值,VLOOKUP 就会取一个值(比如“a”)和 returns 另一列(比如“B”列)中的值:VLOOKUP("a", A:A, 2)
如果这是您想要的,您可以创建一个新的(空)列,然后用正确的值填充正确的行,例如:
# Create a new column named C
df["C"] = None
# Fill the cells in C for which the column A matches the condition =="a"
df.loc[df["A"] == "a", "C"] = df.loc[df["A"] == "a", "B"]
您可以使用 np.where
填充 C
,然后使用 A
和 B
C
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': {0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e'},
'B': {0: '-', 1: 'a', 2: 'a', 3: 'b', 4: 'd'}})
df['C'] = np.where(df['B'].isin(df['A'].values), df['B'], np.nan)
df['C'] = df['C'].map(dict(zip(df.A.values, df.B.values)))
使用列表推导式进行 Vlookup
list1=['a','b','c','d','e']
list2=[np.empty,'a','a','b','d']
df=pd.DataFrame({'A':list1,'B':list2})
df['C']=[df.loc[df['A']==x,'B'].values if x in df['A'].values else '' for x in df['B']]