Python数据帧中的计算和更新结果

2024-05-12 23:52:54 发布

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

我是一个最近从excel转换到python的人。我想我在这里要做的是传统上用一种Vlookup。但是,我可能正在与术语作斗争,无法找到python解决方案。我的大部分数据分析框架都在使用pandas库。你知道吗

我有两个不同的数据帧。一个是权重变化(DF1),另一个是权重变化(DF2)。我想一行一行地进行(更改是按时间顺序排列的)并且:

  1. 在DF1中创建一个新的列,其权重更改之前
    (基本上从DF2中提取)。你知道吗
  2. 在DF2中更新结果,其中Weight=Weight+weighchange

注意:数据帧没有相同的尺寸,一个个体有几个权重变化(DF1),但只有一个权重(DF2):

    Name  WeightChange 
1   John  5
2   Peter 10  
3   John  7  
4   Mary  -20  
5   Gary  -3 

DF2型:

    Name  Weight 
1   John  180
2   Peter 160   
3   Mary  120  
4   Gary  150  

Tags: 数据name传统解决方案johnexcelpeter权重
1条回答
网友
1楼 · 发布于 2024-05-12 23:52:54

首先,我在'Name'列上^{}df1和df2,将weight列添加到df1。你知道吗

然后我在name上^{}df1并应用^{}来计算每个人的总体重变化。transform返回一个与原始df对齐的序列,这样就可以将聚合列添加回df。你知道吗

然后我将此列合并到df2,然后将此总权重更改添加到现有的权重列:

In [242]:
df1 = df1.merge(df2, on='Name', how='left')
df1['WeightChangeTotal'] = df1.groupby('Name')['WeightChange'].transform('sum')
df1

Out[242]:
    Name  WeightChange  Weight  WeightChangeTotal
0   John             5     180                 12
1  Peter            10     160                 10
2   John             7     180                 12
3   Mary           -20     120                -20
4   Gary            -3     150                 -3

In [243]:
df2 = df2.merge(df1[['Name','WeightChangeTotal']], on='Name')
df2

Out[243]:
    Name  Weight  WeightChangeTotal
0   John     180                 12
1   John     180                 12
2  Peter     160                 10
3   Mary     120                -20
4   Gary     150                 -3

In [244]:
df2['Weight'] = df2['Weight'] + df2['WeightChangeTotal']
df2

Out[244]:
    Name  Weight  WeightChangeTotal
0   John     192                 12
1   John     192                 12
2  Peter     170                 10
3   Mary     100                -20
4   Gary     147                 -3

编辑

要在“weightbeafore”列中说明您想要的行为:

In [267]:
df1['WeightBefore'] = df1['Weight']  + df1.groupby('Name')['WeightChange'].shift().cumsum().fillna(0)
df1

Out[267]:
    Name  WeightChange  Weight  WeightBefore
0   John             5     180           180
1  Peter            10     160           160
2   John             7     180           185
3   Mary           -20     120           120
4   Gary            -3     150           150

因此,上面的“Name”组将^{}应用于列,然后^{}所以我们添加增量差异,我们必须调用^{},因为这将产生NaN值,其中每个名称只有一个权重变化。你知道吗

相关问题 更多 >