【发布时间】:2020-05-01 08:28:41
【问题描述】:
我有一个名为 test3 的数据集,看起来像(从 excel 导入):
$ID $spec $orient $direct $rep $slope $intercept
9119 1 stance 15b 1 2859.09223 158
9119 2 stance 15b 2 2886.53583 321
9119 3 stance 0 1 2860.91423 21
9119 4 fall 15f 1 2878.9364 326
9119 5 fall 15f 2 2902.0397 45
9120 1 stance 15b 1 1444.91347 654
9120 2 stance 15b 2 1460.09585 23
9120 3 stance 0 1 1470.2588 85
9120 4 fall 15f 1 1481.6892 225
9120 5 fall 15f 2 1475.40215 145
还有一个名为test3mean的模板数据框:
$ID $spec $orient $direct $slope $intercept
9119 1 stance 15b nan nan
9119 2 stance 0 nan nan
9119 3 fall 15f nan nan
9120 1 stance 15b nan nan
9120 2 stance 0 nan nan
9120 3 fall 15f nan nan
我正在使用 Pandas 数据框计算 $slope 和 $intercept 在 test3 中重复测量的平均值,并将它们放在 test3mean 中的相应列中:
ID = np.array([9119,9120])
orient = np.array(['stance','fall'])
direct = np.array(['0','15f','15b'])
for i in ID:
for o in orient:
for d in direct:
test3mean[test3mean['$ID']==i][test3mean['$orient']==o][test3mean['$direct']==d][['$slope','$intercept']] = test3[test3['$ID']==i][test3['$orient']==o][test3['$direct']==d][test3['$rep']!=3].mean()[['$slope','$intercept']]
但是,test3mean 不会改变。我知道复制与查看问题,并且已经看到df.loc[:,()] 解决方案,但无法针对我的具体情况实施它们。
两步循环后的预期输出将是 test3mean 的样子:
$ID $spec $orient $direct $slope $intercept
9119 1 stance 15b 2872.81403 239.5
9119 2 stance 0 2860.91423 21
9119 3 fall 15f nan nan
9120 1 stance 15b nan nan
9120 2 stance 0 nan nan
9120 3 fall 15f nan nan
【问题讨论】:
-
你能提供预期的输出吗
-
我认为您需要重新考虑并使用
groupby和merge以获得所需的结果。由于复制与视图问题,您正在使用索引链接,这在熊猫中是一个很大的“不可以”。 -
@Kenan:我在问题中添加了一个示例输出。
-
@Scott:我知道我不应该使用索引链接,但我无法将我找到的解决方案应用于我的案例,它有三个 getitem 命令和两列(每次更换一块1X2)。你能提供一个具体的建议吗?
标签: python pandas dataframe data-science