be8*_*e84 1 python if-statement vlookup dataframe pandas
我有一个主数据框和三个较小的数据框。最终,我想在主数据框中创建一个新列,指示每行是否满足两个条件。
为了简单起见,我只包含了较小的数据帧之一。
data = [['Tom', 10], ['Nick', 15], ['Juli', 14], ['Tom', 7], ['Juli', 9]]
main_df = pd.DataFrame(data, columns=['A', 'B'])
A B
0 Tom 10
1 Nick 15
2 Juli 14
3 Tom 7
4 Juli 9
data1 = [[5, 'Juli'], [17, 'Tom'], [6, 'Juli'], [8,'Tom']]
df1 = pd.DataFrame(data1, columns=['AA', 'BB'])
AA BB
0 5 Juli
1 17 Tom
2 6 Juli
3 8 Tom
Run Code Online (Sandbox Code Playgroud)
我希望我的最终数据框看起来像这样:
A B C
0 Tom 10 X
1 Nick 15
2 Juli 14
3 Tom 7 X
4 Juli 9 X
Run Code Online (Sandbox Code Playgroud)
我尝试过合并数据帧,但它创建了太多行并超出了 python 的限制。
使用merge_asof公差:
tmp = (pd.merge_asof(main_df.reset_index().sort_values(by='B'),
df1.rename(columns={'BB': 'A', 'AA': 'B'})
.sort_values(by='B').assign(C='X'),
on='B', by='A', tolerance=5, direction='nearest'
)
.set_index('index')['C'].fillna('')
)
main_df['C'] = tmp
Run Code Online (Sandbox Code Playgroud)
输出:
A B C
0 Tom 10 X
1 Nick 15
2 Juli 14
3 Tom 7 X
4 Juli 9 X
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
51 次 |
| 最近记录: |