繁体   English   中英

熊猫添加日期列

[英]Pandas adding column with date

我想添加一个日期差列,该列将花费一些日期并减去到df中的日期列。 棘手的部分是,如果Id两次不显示,则只会计算“名称”列中是否有字符串X。 例如,

DF

Id Date Name

111 1/1/17 Xyz

123 1/2/17 Xab

222 1/1/17 abc

222 1/2/17 Xab

333 1/1/17 abc 

333 1/2/17 def

如果我使用currentdate = datetime.date(2017,5,1),结果将是:

Id Date Name Diff

111 1/1/17 Xyz 4  

123 1/2/17 Xab 3  

222 1/1/17 abc 0  

222 1/2/17 Xab 0  (this is 0 since 222 already showed up)

333 1/1/17 abc 0

333 1/2/17 def 0

我的方法是按字符串“ X”对它们进行分组,但是我不确定如何将其放入唯一行。 先感谢您!

首先,创建一个时间戳对象-

d = pd.to_datetime('2017-01-5')

选项1
现在,计算差异,并使用mask根据您的条件隐藏行-

m = df['Id'].duplicated(keep=False) | ~df['Name'].str.contains('X')
df['Diff'] = (d - pd.to_datetime(df['Date'])).dt.days.mask(m, 0)

df

    Id    Date Name  Diff
0  111  1/1/17  Xyz     4
1  123  1/2/17  Xab     3
2  222  1/1/17  abc     0
3  222  1/2/17  Xab     0
4  333  1/1/17  abc     0
5  333  1/2/17  def     0

我使用pd.Series.duplicated删除那些重复的条目,并使用str.contains检查X是否在Name


选项2
您可以使用np.where ,但是方法类似-

m = df['Id'].duplicated(keep=False) | ~df['Name'].str.contains('X')
df['Diff'] = np.where(m, 0, (d - pd.to_datetime(df['Date'])).dt.days)

df

    Id    Date Name  Diff
0  111  1/1/17  Xyz     4
1  123  1/2/17  Xab     3
2  222  1/1/17  abc     0
3  222  1/2/17  Xab     0
4  333  1/1/17  abc     0
5  333  1/2/17  def     0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM