从聚合数据集中生成第一次测量和最后一次测量之间的差异



我有一个数据集,每个参与者在一周内都有几个重复的测量值,我使用"groupby"one_answers".agg"函数对其进行聚合,以获得如下的第一个和最后一个测量值:
df2=df.groupby("ID").agg(['first', 'last']).stack()

现在看起来是这样的:

| ID |      | Age | Score | Measure |
| -- | ---- | --- | ----- | ------  |
| 0  | first| 69  | 48    | 34      |
|    | last | 69  | 52    | 33      |
| 1  | first| 58  | 28    | 89      |
|    | last | 58  | 14    | 34      |

我想使用第一个和最后一个值聚合创建一个数据集,以在Score和Measure变量的这些值之间创建差异。它应该是这样的:

| ID | Age | Score_diff | Measure_diff |
| -- | --- | ---------- | ------------ |
| 0  | 69  | 4          | 1            |
| 1  | 58  | 14         | 55           |

我不知道该如何处理(我是Python新手(。有人能帮我吗?

向致以最良好的祝愿

您可以尝试以下操作:

import pandas as pd
df2 = df.groupby("id").agg(['first', 'last']).stack().reset_index().set_index("id")
>>> df2
level_1  Age  Score  Measure
id                             
0    first   69     48       34
0     last   69     52       33
1    first   58     28       89
1     last   58     14       34

groupby("id"),以便将以下函数应用于它们中的每一个,并将它们agg应用于列表。

df3 = df2.groupby("id").agg(list)
df3["Age"] = df3["Age"].apply(lambda x: x[0]) # x[0] and x[1] are equal
>>> df3
level_1  Age     Score   Measure
id                                        
0   [first, last]   69  [48, 52]  [34, 36]
1   [first, last]   58  [28, 14]  [89, 34]

然后应用lambda函数来获得两个值之间的差。

df3["Score_diff"] = df3["Score"].apply(lambda x: abs(x[1] - x[0]))
df3["Measure_diff"] = df3["Measure"].apply(lambda x: abs(x[1] - x[0]))

并删除你不想要的列

df3 = df3.drop(columns=["level_1", "Score", "Measure"])
>>> df3
Age  Score_diff  Measure_diff
id                               
0    69           4             2
1    58          14            55
import pandas as pd
import numpy as np

你也可以这样做:

df=df.reset_index()
result=(df.groupby(['ID','Age'])
.agg(lambda x:abs(np.diff(x)))
.rename(columns=lambda x:x+'_diff')
.reset_index())

现在,如果你打印result,你会得到:

ID  Age   Score_diff    Measure_diff        
0   69      4           1
1   58      14          55

相关内容

  • 没有找到相关文章

最新更新