在pandas中,计算列中行值的乘积(按类别分组)并将产品值分配给每个组中的所有行?

时间:2018-05-12 16:56:12

标签: python pandas

我的dataframe df有3列 'part':部件号 'test':测试名称 'test_pass':每个test.1的传递或失败结果.1传递,0失败。

enter image description here

我想创建第四列'part_pass'。 对于任何“部分”,如果至少有一个'test_pass'等于0,那么'part'是一个失败的部分。对于那部分,我想让'part_pass'对于'part'的所有行都等于0。

对于任何'part',如果'test_pass'都等于1,则'part'是传递部分。对于那部分,我希望'part_pass'对于'part'的所有行都等于1.

enter image description here

如何计算按'part'分组的'test_pass'的乘积,并将结果值分配给partlpass的'part_pass'行?

1 个答案:

答案 0 :(得分:1)

重现数据集的代码:

df = pd.DataFrame()
df["part"] = [1,2,3,1,2,3,1,2,3]
df["test"] = ["test1"]*3 + ["test2"]*3 + ["test3"]*3
df["test_pass"] = [1,1,0,1,1,1,1,1,1]

part    test    test_pass
0   1   test1   1
1   2   test1   1
2   3   test1   0
3   1   test2   1
4   2   test2   1
5   3   test2   1
6   1   test3   1
7   2   test3   1
8   3   test3   1

您需要以下逻辑(几乎所有,但使用索引):

df2 = df.set_index("part")
df2["part_pass"] = df.groupby("part")["test_pass"].prod()
df2 = df2.reset_index()


part    test    test_pass   part_pass
0   1   test1   1           1
1   2   test1   1           1
2   3   test1   0           0
3   1   test2   1           1
4   2   test2   1           1
5   3   test2   1           0
6   1   test3   1           1
7   2   test3   1           1
8   3   test3   1           0