基于约束的数据框列生成

时间:2019-10-31 06:22:59

标签: python pandas numpy

我有一个数据框,其中包含:

B_Date   C_b
02/08/2019  2
02/08/2019  1
02/08/2019  1
02/08/2019  1 
02/08/2019  3
02/08/2019  3
02/08/2019  2
02/08/2019  2
02/08/2019  2
02/08/2019  1
02/08/2019  4
02/08/2019  3
02/08/2019  4
02/08/2019  2
02/08/2019  4
02/08/2019  3
02/08/2019  4
02/08/2019  4
02/08/2019  4
03/08/2019  3
03/08/2019  1

我想创建一个新列i_found,以便对于特定日期,如果C_b的总和大于5000,则应在所有条目中放入4否则为5。

预期产量

     B_Date    C_b  i_found
    02/08/2019  2    5
    02/08/2019  1    5
    02/08/2019  1    5
    02/08/2019  1    5
    02/08/2019  3    5

请注意,这只是示例条目,总数不会达到5000,但是数据框总共有3万个条目,其中c_b达到5000。任何人都可以提供帮助。

任何人都可以帮忙。

1 个答案:

答案 0 :(得分:1)

一种方法是执行merge以获取分组和,然后分配新值:

s = df.merge(df.groupby("B_Date").sum().reset_index(),on="B_Date",how="left",suffixes=("_old","_new"))
s["i_found"] = np.where(s["C_b_new"]>5000, 4, 5)

print (s.drop("C_b_new", axis=1))
#
        B_Date  C_b_old  i_found
0   02/08/2019        2        5
1   02/08/2019        1        5
2   02/08/2019        1        5
3   02/08/2019        1        5
4   02/08/2019        3        5
5   02/08/2019        3        5
6   02/08/2019        2        5
7   02/08/2019        2        5
8   02/08/2019        2        5
9   02/08/2019        1        5
10  02/08/2019        4        5
11  02/08/2019        3        5
12  02/08/2019        4        5
13  02/08/2019        2        5
14  02/08/2019        4        5
15  02/08/2019        3        5
16  02/08/2019        4        5
17  02/08/2019        4        5
18  02/08/2019        4        5
19  03/08/2019        3        5
20  03/08/2019        1        5