程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如果满足多个条件,如何将一列的值设置为等于另一列?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如果满足多个条件,如何将一列的值设置为等于另一列??

开发过程中遇到如果满足多个条件,如何将一列的值设置为等于另一列?的问题如何解决?下面主要结合日常开发的经验,给出你关于如果满足多个条件,如何将一列的值设置为等于另一列?的解决方法建议,希望对你解决如果满足多个条件,如何将一列的值设置为等于另一列?有所启发或帮助;

我有一个类似 ID 和多个事件以及一个开始日期的数据框。我想让结束日期与下一个事件的开始日期相同,如果下一个事件没有开始日期,则为 null。

ID event start      end
1  a     01/01/21
1  b     02/01/21
1  c     03/01/21
1  d     04/01/21
1  e     
2  b     05/01/21
2  c     01/01/21
2  a     02/01/21
2  d     04/01/21
2  e     
3  e
3  b     01/01/21
3  d     02/01/21
3  a     04/01/21
3  c     04/01/21

如果 ID 1 和事件 b 有开始日期,我希望它是 ID 1 和事件 a 的结束日期。 所以基本上每个下一个事件开始日期都是同一个 ID 的前一个事件结束日期,我想遍历整个数据框。

我希望数据框看起来像

ID event start      end
1  a     01/01/21 01/01/21
1  b     02/01/21 03/01/21
1  c     03/01/21 04/01/21
1  d     04/01/21
1  e     
2  b     05/01/21 01/01/21
2  c     01/01/21 04/01/21
2  a     02/01/21 05/01/21
2  d     04/01/21
2  e     
3  e
3  b     01/01/21 04/01/21
3  d     02/01/21
3  a     04/01/21 01/01/21
3  c     04/01/21 02/01/21

我尝试使用像这样的 for 循环,但我无法让它工作。

for s in data["ID"]:
    row = data[(data["ID"] == s) & (data["event"] == "a")]
    if row["Start_Date"].isnull == True:
        pass
    else:
        row1 = data[(data["ID"] == s) & (data["event"] == "b")]
        if row1["start"].isnull == True:
            pass
        else:
            row["end"] = row1["start"]

有没有更好的方法来做到这一点,或者我是否在正确的轨道上,但我的执行失败了?我怎样才能实现我想要的数据框?任何帮助将不胜感激。

编辑:事件并不总是按顺序排列,因此我尝试使用循环遍历每一行并手动检查它前面的特定事件。

解决方法

您可以首先使用 ascendingsort_values() 的 2 列、ID 和事件对数据框进行排序。然后,您可以使用 groupbyshift() 来获取上一个事件的开始日期,并将其指定为下一个事件的结束。

为了保持数据框的结构不变(因为我们正在对值进行排序,但我们想恢复到原始的 index),在我们的第一步中,让我们创建一个列表,该列表将作为 {{1 }} 我们可以在最后使用。这样我们就可以确保保持数据集的原始结构。

组合成代码:

index

会让你回到你想要的结果:

# Store your initial index
s = df.index.tolist()

# Sort values by ID and Event in ascending order
df.sort_values(by=['ID','event'],ascending=[True,True],inplace=TruE)

# Get the end date,which is the start date of the previous event
df['end']=df.groupby('ID')['start'].shift(-1)

# Make sure your columns are dates
df['start'],df['end']  = df['start'].dt.date,df['end'].dt.date
df.fillna('',inplace=TruE)

# Reindex to get the initial structure
df.reindex(s)

大佬总结

以上是大佬教程为你收集整理的如果满足多个条件,如何将一列的值设置为等于另一列?全部内容,希望文章能够帮你解决如果满足多个条件,如何将一列的值设置为等于另一列?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: