gpt4 book ai didi

python - 根据现有列中的某些规则在新数据框列中设置值

转载 作者:行者123 更新时间:2023-12-01 00:10:07 25 4
gpt4 key购买 nike

我想在现有数据框中创建一个新列,其中每行中的值以相邻列中的某些规则为条件。让我举个例子。我有以下字典:

d1={"commence_time":["12/6/2019 14:00", "12/7/2019 17:30", 
"12/7/2019 17:30","12/8/2019 19:30",
"12/9/2019 19:30","12/28/2019 15:00",
"12/28/2019 15:00","12/28/2019 15:00"],
"value1":["5","5","5","5","5","5","5","5"]}

我创建了以下数据框:

df1=pd.DataFrame(data=d1)

结果是:

    commence_time     value1
0 12/6/2019 14:00 5
1 12/7/2019 17:30 5
2 12/7/2019 17:30 5
3 12/8/2019 19:30 5
4 12/9/2019 19:30 5
5 12/28/2019 15:00 5
6 12/28/2019 15:00 5
7 12/28/2019 15:00 5

我想创建另一个名为 value2 的列,其中应用以下规则:如果开始时间后面跟着下一行中的不同开始时间,则第一行中的 value2 应等于 value1。如果开始时间与下一行(甚至可能是下一行)中的开始时间完全相同,则 value2 中的数字是 value1 的总和除以 5。预期结果为:

    commence_time   value1  value2
0 12/6/2019 14:00 5 5
1 12/7/2019 17:30 5 10
2 12/7/2019 17:30 5 10
3 12/8/2019 19:30 5 5
4 12/9/2019 19:30 5 5
5 12/28/2019 15:00 5 10
6 12/28/2019 15:00 5 10
7 12/28/2019 15:00 5 10

我真的不知道如何解决这个问题,所以我没有真正尝试任何东西。建议表示赞赏。

最佳答案

如果您的 DataFrame 按上述方式排序,那么这并不是连续检查,而可能只是重复检查。使用掩码仅向所需的行添加 5。

magic_num = 5

df1['value2'] = df1.value1.astype(int) + df1.commence_time.duplicated(keep=False)*magic_num

但是,如果确实需要连续行检查,而不是 DataFrame 中的任何位置,则可以检查移位值并查找大于 1 的组以将值添加到其中。

s = df1.commence_time.ne(df1.commence_time.shift()).cumsum()
df1['value2'] = df1.value1.astype(int) + (s.groupby(s).transform('size') > 1)*magic_num
<小时/>
      commence_time value1  value2
0 12/6/2019 14:00 5 5
1 12/7/2019 17:30 5 10
2 12/7/2019 17:30 5 10
3 12/8/2019 19:30 5 5
4 12/9/2019 19:30 5 5
5 12/28/2019 15:00 5 10
6 12/28/2019 15:00 5 10
7 12/28/2019 15:00 5 10

关于python - 根据现有列中的某些规则在新数据框列中设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59689327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com