【发布时间】:2021-05-16 08:07:16
【问题描述】:
我有一个包含 3 列的日期框架,包括一些重复的行:
dict1 = {'experiment': ['A', 'B', 'B', 'C', 'C', 'C', 'C'], 'run': ['A-1', 'B-1', 'B-2', 'C-1', 'C-1', 'C-2', 'C-2'], 'data': [6, 5, 5, 4, 4, 4, 4]}
df1 = pd.DataFrame(data=dict1)
print(df1)
experiment run data
0 A A-1 6
1 B B-1 5
2 B B-2 5
3 C C-1 4
4 C C-1 4
5 C C-2 4
6 C C-2 4
我正在尝试为每一行创建一个新列,其中包含该实验的唯一运行的列“数据”的总和。重复的行应该保持不变。所以我的预期结果是:
experiment run data exp-sum
0 A A-1 6 6
1 B B-1 5 10
2 B B-2 5 10
3 C C-1 4 8
4 C C-1 4 8
5 C C-2 4 8
6 C C-2 4 8
我尝试过结合 .groupby 和 .unique,但到目前为止,每次运行我只能得到正确的总和,这需要进一步总结(每次实验),然后写入原始 df。
print(df1.groupby('run')['data'].unique())
run
A-1 [6]
B-1 [5]
B-2 [5]
C-1 [4]
C-2 [4]
非常欢迎任何意见!
【问题讨论】:
-
为什么运行
B-2的exp-sum是10而不是5? -
实验 B 有两个独特的运行,B-1 和 B-2。所有行的 exp-sum 应该是该实验中唯一运行的数据总和。所以这里实验 B 的每一行都是 5+5(来自 B-1 和 B-2)。
-
如果
4行中的数据将是5而不是4,结果应该是什么? -
如果第 4 行中的数据为 5,则第 3 行中的数据也必须为 5,因为行是重复的,并且相同的 'exp' 和 'run' 将始终具有相同的数据。对于实验 C,exp-sum 的结果应该是 9。