我有以下pandas DataFrame示例。我试图让一些特殊行的总和。我已经研究了如何进行,但是找不到解决方案。你能给个方向吗?示例如下。我以为可以按组和求和,但是有列(Value_3)我不希望对它们求和,只是保持不变。值3是恒定值,因Machine和Shift值而异。
data = {'Machine':['Mch_1', 'Mch_1', 'Mch_1', 'Mch_1', 'Mch_2', 'Mch_2'], 'Shift':['Day', 'Day', 'Night', 'Night', 'Night', 'Night'], 'Value_1':[1, 2, 0, 0, 1, 3], 'Value_2':[0, 2, 2, 1, 3, 0], 'Value_3':[5, 5, 2, 2, 6, 6]}
df = pd.DataFrame(data)
输出:
Mch_1__Day__1__0__5
Mch_1__Day__2__2__5
Mch_1__Night_0__2__2
Mch_1__Night_0__1__2
Mch_2__Night_1__3__6
Mch_2__Night_3__0__6
我想拥有的就像数据框所示。
expected = {'Machine':['Mch_1', 'Mch_1', 'Mch_2'], 'Shift':['Day', 'Night', 'Night'], 'Value_1':[3, 0, 4], 'Value_2':[2, 3, 3]}
df_expected = pd.DataFrame(expected)
df_expected
输出:
Mch_1__Day__3__2__5
Mch_1__Night_0__3__2
Mch_2__Night_4__3__6
非常感谢你。
第一个想法是聚合函数的传递字典,最后一列是可能的用法first
或last
函数:
d = {'Value_1':'sum','Value_2':'sum','Value_3':'first'}
df1 = df.groupby(['Machine','Shift'], as_index=False).agg(d)
如果需要更动态的解决方案,则意味着对所有没有Value_3
创建字典的列求和,dict.from_keys
并用和在list中未指定的所有列求和Index.difference
:
d = dict.fromkeys(df.columns.difference(['Machine','Shift', 'Value_3']), 'sum')
d['Value_3'] = 'first'
df1 = df.groupby(['Machine','Shift'], as_index=False).agg(d)
print (df1)
Machine Shift Value_1 Value_2 Value_3
0 Mch_1 Day 3 2 5
1 Mch_1 Night 0 3 2
2 Mch_2 Night 4 3 6
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句