现有Df1、df2,df1拥有A、B两列,df2只有两列数据,df1新建第三列,进行判断:若A、B同时满足存在于df2内,则C列写入"买卖",如果只有A存在于df2内,则C写入"买",如果只有B存在于df2内,则C写入"卖",如果A和B都不存在于df2内,则C写入"空"
时间: 2024-09-24 20:13:32 浏览: 41
在Python的Pandas库中,你可以使用条件布尔索引来实现这样的操作。首先,你需要创建一个笛卡尔积(Cartesian product)来检查每个组合(A, B)是否都在df2中,然后根据结果填充df1的新列C。以下是具体的步骤:
```python
import pandas as pd
# 假设 df1 和 df2 是 DataFrame 的实例
df1 = pd.DataFrame({'A': df1['A'].tolist(), 'B': df1['B'].tolist()})
df2 = pd.DataFrame({'Column1': df2['Column1'].tolist(), 'Column2': df2['Column2'].tolist()})
# 创建笛卡尔积
combined_df = pd.merge(df1, df2, how='outer', indicator=True)
# 根据合并结果填写新列C
combined_df['C'] = np.select(
[
(combined_df['_merge'] == 'both'), # A和B同时存在
(combined_df['_merge'] == 'left_only') & (combined_df['Column1'].notna()), # 只有A存在
(combined_df['_merge'] == 'right_only') & (combined_df['Column2'].notna()), # 只有B存在
(combined_df['_merge'] == 'none') # A和B都不存在
],
['买卖', '买', '卖', '空'],
default='空'
)
# 将结果回填到原始df1
df1['C'] = combined_df[df1.index]['C']
# 删除临时用于合并的 '_merge' 列
df1.drop('_merge', axis=1, inplace=True)
```
在这个例子中,`np.select`函数根据不同的条件选择相应的字符串并填充到新列C中。最后别忘了删除临时添加的 `_merge` 列。
阅读全文