我想找出Pandas groupby Dataframe 中的值之间的差异,但针对特定的列值。我读过很多关于使用diff
命令的帖子,但无论分组如何,这都适用于后续行。
在下面的数据框(它是一个字典)中,数据框包含用户id trial_id
、条件placebovstreatment
、主持人变量expbin
和值列。
我想计算用户内的值之间的差异,但前提是用户具有特定条件类别的值。
例如,用户1的值为
correct_placebo_baseline 10.000
correct_treatment 21.000
差11分。
用户2的值为
0 22.000
correct_placebo_baseline 8.688
两者的差距大约是14。
用户1在列类别correct_placebo_baseline
和correct_treatment
之间存在差异。用户2在correct_placebo_baseline
和类别“0”之间存在差异。
如何仅在用户同时具有correct_placebo_baseline
和'correct_treatment'分组时进行计算?或者,如何创建列,其中差异是每个用户每个组的特定差异?
公式可以为每个trial_id创建列difference from baseline for correct placebo
和“0与基线的差异”。
挑战在于有些用户没有基线分数,有些用户只有基线分数,只有两者都有,我才需要差值。
我试图找到一种方法,当groupby categories满足某些条件时运行函数,但没有成功。
谢谢你的帮助,如果我能让这个问题更容易回答,请告诉我。
{'trial_id': {0: 1, 1: 1, 2: 1, 3: 2, 4: 2, 5: 3, 6: 3, 7: 4, 8: 4, 9: 5},
'placebovstreatment': {0: '0',
1: 'correct_placebo_baseline',
2: 'correct_treatment',
3: '0',
4: 'correct_placebo_baseline',
5: 'correct_placebo_baseline',
6: 'incorrect_placebo',
7: 'correct_placebo_baseline',
8: 'incorrect_placebo',
9: '0'},
'expbin': {0: 1, 1: 1, 2: 1, 3: 2, 4: 2, 5: 2, 6: 2, 7: 1, 8: 1, 9: 1},
'value': {0: 31.5,
1: 10.0,
2: 21.0,
3: 22.0,
4: 8.688,
5: 20.0,
6: 37.5,
7: 12.0,
8: 32.5,
9: 10.0}}
2条答案
按热度按时间yeotifhr1#
您可以使用groupby方法按“user_id”列对 Dataframe 进行分组,然后使用transform方法创建具有每个组内的差值的新列。要仅在用户同时具有“correct_soluberate_baseline”和“correct_treatment”分组时计算差值,您可以使用any方法检查该组是否同时具有这两个值。以下是如何执行此操作的示例
此代码首先创建一个新列“difference_placebo_treatment”,其中包含每个“user_id”组内的值差异。然后,它创建一个新列“has_both_placebo_treatment”,用于检查该组是否同时具有“correct_solubo_baseline”和“correct_treatment”值。最后,它创建了一个新列“difference_placebine_baseline”,仅当"has_both_placebine_treatment“列为True时才计算差异,否则将为NaN。
kuarbcqp2#
您可以
pivot
来获取列形式的条件:输出:
然后,您可以轻松地执行计算:
输出: