pandas 将 Dataframe 单元格中的值复制到同一行中的其他单元格

j8yoct9x  于 2023-02-27  发布在  其他
关注(0)|答案(1)|浏览(228)

我有一个问题,链索引在Pandas Dataframe ,我知道必须避免。
我正在检查一个 Dataframe 的两个不同的列中是否有相同的开始日期和结束日期。如果它们相同,我希望将相同的值读取到同一行的第三列,即确切日期列。
Dataframe 如下所示:
| 指标|仿真陈述_ID|患者ID|患者姓名|备用名称|事件类型|事件_日期之后|事件_之前日期|事件_开始|事件结束|事件日期|个人_标题|个人_功能|地名|仪器名称|依赖者|来源_引文|附加信息|评论|信息转储|源|
| - ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|
| 无|小行星3342|美国石油协会|格奥尔格·克里斯蒂安·戈特利布·西奥菲尔·韦德金|不适用|抑制|不适用|不适用|一七八八年十一月九日|一七八八年十一月九日|不适用|医学博士/哲学博士h.c.|米特利德|美因茨|美因茨大学,医学教育|不适用|不适用|在1788年7月5日通过的一项最后决定中,他没有进行试验。|不适用|不适用|专业API|
到目前为止,我正在尝试使用这个:

# SAME START/AFTER AND END/BEFORE DATE = EXACT DATE
      # be careful to avoid chain-indexing in dataframe
      # use multi-axis indexing (df.loc['a', '1']) instead
      
      if e_df['event_start'].equals(e_df['event_end']):
        new_date=e_df['event_start'].values[0]
        #print(new_date)
        f_unique.loc[x, 'event_date']=new_date
      if e_df['event_after-date'].equals(e_df['event_before-date']):
        new_date=e_df['event_after-date'].values[0]
        #print(new_date)
        f_unique.loc[x, 'event_date']=new_date # NOT WORKING!!
      if len(e_df["event_date"].values[0])>=4:
        new_date=e_df["event_date"].values[0]
        f_unique.loc[x, 'event_start']=new_date
        f_unique.loc[x, 'event_end']=new_date
      else:
        new_date=e_df['event_date'].values[0]
        f_unique.loc[x, 'event_date']=new_date

在此代码部分中,f_unique是包含9000多行的整个 Dataframe 。e_df是我在逐个查看行时分析的单个行。x是从"0"到len(f_unique)的索引。
如果我在操作后查看f_unique,很遗憾,值没有更新。我该如何修复这个问题?
我的预期输出如下:
| 指标|仿真陈述_ID|患者ID|患者姓名|备用名称|事件类型|事件_日期之后|事件_之前日期|事件_开始|事件结束|事件日期|个人_标题|个人_功能|地名|仪器名称|依赖者|来源_引文|附加信息|评论|信息转储|源|
| - ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|
| 无|小行星3342|美国石油协会|格奥尔格·克里斯蒂安·戈特利布·西奥菲尔·韦德金|不适用|抑制|不适用|不适用|一七八八年十一月九日|一七八八年十一月九日|一七八八年十一月九日|医学博士/哲学博士h.c.|米特利德|美因茨|美因茨大学,医学教育|不适用|不适用|在1788年7月5日通过的一项最后决定中,他没有进行试验。|不适用|不适用|专业API|
也许在这种情况下,遍历行已经是一种错误的方法,但是我还在后面的代码中做了其他事情,例如,如果某些行包含某些触发事件,则复制这些行。

k97glaaz

k97glaaz1#

我将使用np.where这样的函数来赋值event_date列,它的格式为np.where(condition, value_if_true, value_if_false),例如,下面的语句可以作为替换前两个if语句的开始:

f_unique['event_date'] = np.where(f_unique.event_start == f_unique.event_end, f_unique.event_start, 
                      (np.where(f_unique.event_after-date== f_unique.event_before-date, f_unique.event_after-date, 
                      <some_default_value>))

相关问题