python - 如果行在熊猫中匹配,则在列之间匹配行并创建新列
问题描述
如果我有以下数据框(df)
emp_id email_ad full_nm mgr_emp_id
65391 Pierric.Beckert@email.com Pierric Beckert 57834
65392 Mat.Yokoyama@email.com Mat Yokoyama 92499
65393 Kevin.Harvey@email.com Kevin Harvey 45325
对于 中的每一行mgr_emp_id
,如果mgr_emp_id
与中的员工 id 匹配,则通过从列中获取名称来emp_id
创建一个新列。 Manager_Name
full_nm
我尝试了以下但我不确定如何调用该函数
def mgr1(row):
for row in df['mgr_emp_id']:
if row['mgr_emp_id'] == row['emp_id']:
df['Manager Name']=row['full_nm']
我试着这样称呼它:
df.apply(lambda row: mgr1(row),axis=1)
但我收到一个错误:
TypeError:“浮动”对象不可下标
如果有更好的方法来实现我想要做的事情,请提供任何帮助:)
解决方案
如果我正确理解了您的问题,那么您希望为每个匹配的 id 实例“创建一个新列”就会感到困惑。大概您想要的是一个名为“管理名称”的附加列,如果emp_id
匹配mgr_emp_id
,您希望full_nm
等于“管理名称”。显然,如果存在不平等,您将不知道管理名称。
要实现这一点,您可以简单地创建一个新的 NAN 值列,过滤emp_id
匹配的行mgr_emp_id
,并用该行的值替换这些行的 NAN 值full_nm
。
df = pd.DataFrame([
[65391, 'Pierric.Beckert@email.com', 'Pierric Beckert', 57834],
[65392, 'Mat.Yokoyama@email.com', 'Mat Yokoyama', 92499],
[65393, 'Kevin.Harvey@email.com', 'Kevin Harvey', 45325],
[11111, 'example.same@email.com', 'Example Same', 11111]],
columns=['emp_id', 'email_ad', 'full_nm', 'mgr_emp_id'])
df['manager_name'] = np.nan
df.loc[df.emp_id.eq(df.mgr_emp_id), 'manager_name'] = df.full_nm
在最后一行中,我们用于loc
查找emp_id
匹配的行mgr_emp_id
和感兴趣的列(“manager_name”),并将值输入到该数据框元素中,替换 NAN。
结果是:
emp_id email_ad full_nm mgr_emp_id manager_name
0 65391 Pierric.Beckert@email.com Pierric Beckert 57834 NaN
1 65392 Mat.Yokoyama@email.com Mat Yokoyama 92499 NaN
2 65393 Kevin.Harvey@email.com Kevin Harvey 45325 NaN
3 11111 example.same@email.com Example Same 11111 Example Same
如果你想做任何不同的事情,我想你会想要单独的数据框或不同形状的数据框。
推荐阅读
- r - R 版本 4.0.0 上的 ROracle
- c++ - 代码不会在具有相同操作系统和编译器的不同机器上构建
- css - 为什么使用 CSS 列的页面在加载时会重排?
- image - listview 中的图像在视野之外时不会从内存中释放
- jwt - How does all services in microservice architecture (token based) know that the user has logged out?
- excel - Excel 公式 - 通过匹配源单元格连接多个单元格的条件
- ffmpeg - 为什么在使用此 ffmpeg 命令进行 2 遍时出现错误?
- azure-data-explorer - 如何在一个 Kusto 查询中进行 2 个汇总操作?
- java - 如何从具有可迭代性的实体中获取价值
- swift - 定义通用展开器函数