![](/img/trans.png)
[英]Python: Create new rows based on difference between date values in one column
[英]Create a new column with [0,1] based on match between two rows in Python
我正在嘗試將多個列表或數據幀與一個大型基礎 dataframe 進行比較。 然后對於任何匹配,我想 append 一列存儲 1 = 匹配或 0 = 不匹配
df = pd.DataFrame({'Name':['A','B','C','D'], 'ID' : ['5-6','6-7','8-9','7']})
list1 = ['5-6','8-9']
list2 = ['7','4-3']
由於我試圖匹配的值包括一個“-”,它們被計為字符串。 我已經可以生成一個匹配值列表,但是如果我 append 它們,它們都是 0
def f(rows):
for i in df['ID']:
for j in list1:
if i == j:
val = 1
else:
val = 0
return val
df['Answer']= df.apply(f,axis=1)
盡管
for i in df['ID']:
for j in list1:
if i == j:
print (i)
查找所有匹配值。
提前致謝!
您已經循環了.apply
,因此您可以省略循環,並且 for test 用於列表in
成員資格:
def f(rows):
if rows['ID'] in list1:
val = 1
else:
val = 0
return val
df['Answer']= df.apply(f,axis=1)
print (df)
Name ID Answer
0 A 5-6 1
1 B 6-7 0
2 C 8-9 1
3 D 7 0
更簡單的是使用 lambda function 指定列:
df['Answer']= df['ID'].apply(lambda x: 1 if x in list1 else 0)
或者:
df['Answer']= df['ID'].apply(lambda x: int(x in list1))
您可以在這里使用 DataFrame.isin 代替循環,
df['Answer'] = df['ID'].isin(list1).astype(int)
Name ID Answer
0 A 5-6 1
1 B 6-7 0
2 C 8-9 1
3 D 7 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.