如果符合某些条件,则对来自不同数据帧的两个值求和

2024-10-01 05:04:37 发布

您现在位置:Python中文网/ 问答频道 /正文

如果满足某些条件,我想总结两列,每列在不同的框架中

数据帧1:

desk    Type   total_position
desk1   ES     786.0
desk1   ES1    100
desk2   ES1    0
desk2   ES2    10
desk3   ES     0
desk4   ES1    0
desk5   ES     -757

数据帧2:

desk    Type total_position
desk1   ES   -758.0
desk2   ES    0
desk3   ES   -29
desk4   ES    0.0
desk5   ES    786.0

如果第一个数据帧中的类型是“ES”,并且它是同一张桌子,我想对这两个位置求和

我该怎么做

预期答案

desk    Type   total_position
desk1   ES     29
desk2   ES1    0
desk3   ES     -29
desk4   ES1    0
desk5   ES     29

Tags: 数据框架estypeposition条件totaldesk
3条回答

我会{}然后{}:

df1['total_position'] = (df1['total_position'].add(
               df1['desk'].map(df2.set_index('desk')['total_position']))
print(df1)

    desk Type  total_position
0  desk1   ES            28.0
1  desk2  ES1             0.0
2  desk3   ES           -29.0
3  desk4  ES1             0.0
4  desk5   ES            29.0

编辑类型:

m = (df1['desk'].map(df2.set_index('desk')['total_position'])
    .where(df1['Type'].eq('ES')).fillna(0))

df1['total_position'] = df1['total_position'].add(m)
print(df1)

    desk Type  total_position
0  desk1   ES            28.0
1  desk2  ES1             0.0
2  desk3   ES           -29.0
3  desk4  ES1             0.0
4  desk5   ES            29.0

试试这个:

通过索引添加,并使用combine_first更新df1中缺少的值

df1.set_index('desk').add(df2.set_index('desk')).combine_first(df1.set_index('desk'))

注意:这是基于一个天真的假设,即df1中的桌面与df2中的桌面相同

      Type  total_position
desk        
desk1   ES      28.0
desk2   ES1     0.0
desk3   ES     -29.0
desk4   ES1     0.0
desk5   ES      29.0

使用where

>>> df['total_position'] = (df.total_position+df1.total_position).where(df.desk.eq(df1.desk) & df.Type.eq('ES'), 0)
>>> df
    desk Type  total_position
0  desk1   ES            28.0
1  desk2  ES1             0.0
2  desk3   ES           -29.0
3  desk4  ES1             0.0
4  desk5   ES            29.0

相关问题 更多 >