python - 根据2个数据帧计算列值

标签 python pandas datetime numpy

我有 2 个数据框,一个有一个日期列,另一个有 2 个日期列。两者都有相同的索引,即 ID。

我的第一个问题是确定我是否正确,如果我想在两个数据帧上计算,具有相同索引的行将一起计算?

我的第二个问题是,我想在 df1 中的日期和 df2 中的日期之一之间进行区分,如下所示:

df1:

            Date1
 L-22     2015-03-12 
 L-15     2016-02-26

df2:

            Date2              Date3
 L-15     2016-01-11             NaT
 L-22        NaT              2017-01-08

我做了类似的事情,它给出了错误,(“NaTType”对象没有属性“notnull”)

      for i in df1.index:
         if df2['Date2'].ix[i].notnull():
            df1['Days_diff'] = df2['Date2'].sub(df1(train['Date1'], axis=0))
         elif df2['Date3'].ix[i].notnull():
            df1['Days_diff'] =df3['Date3'].sub(df1(train['Date1'], axis=0))

有什么想法吗?谢谢!

最佳答案

我认为你需要combine_firstNaN 替换为列之间的值:

dates = df2.Date2.combine_first(df2.Date3)
#alternative solution
#dates = df2.Date2.fillna(df2.Date3)

print (dates)
L-15   2016-01-11
L-22   2017-01-08
Name: Date2, dtype: datetime64[ns]

然后减去值:

df1['Days_diff'] = dates.sub(df1['Date1'], axis=0)
print (df1)

          Date1  Days_diff
L-22 2015-03-12   668 days
L-15 2016-02-26   -46 days

另一个解决方案是使用条件,但输出似乎是相同的:

date2  = df2['Date2'].where(df2['Date2'].notnull()).sub(df1['Date1'], axis=0)
date3  = df2['Date3'].where(df2['Date3'].notnull()).sub(df1['Date1'], axis=0)
print (date2)
L-15   -46 days
L-22        NaT
dtype: timedelta64[ns]

print (date3)
L-15        NaT
L-22   668 days
dtype: timedelta64[ns]

df1['Days_diff'] = date2.combine_first(date3)
print (df1)
          Date1  Days_diff
L-22 2015-03-12   668 days
L-15 2016-02-26   -46 days

关于python - 根据2个数据帧计算列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42901428/

相关文章:

python - 如何将自定义函数应用于pandas数据框的每一行

python - Pandas 条形图到 numpy 数组

Pandas:将两个数据框列组合在一个排序列中

python - 难以缩小复选框的 XPath 范围

python - 是否可以在 python 一个线性三元条件运算符中放置中断

sqlite - SQLite:根据一天中的时间选择行?

c# - 使用 DateTime.TryParseExact 验证 XML 模式日期时间合规性

python - 在Python中将时间从 'series object of pandas.core.series module'转换为字符串

python - 将scrapy队列存储在数据库中

python - 有没有办法将列表作为 argparse 中的参数之一传递