python - 如何根据条件值对 pandas 进行转换?
问题描述
我正在尝试做一些特征工程,我正在测试的一个想法是将以前的观察添加为数据框中的一列。我知道 .shift() 可以在 pandas 中做到这一点,但问题是我只在它符合特定条件时才看到它移动。
# add new column for previous value
df_labeled = df_labeled.sort_values(by=['ticker', 'periodDate']) #this ensures data/date are in order
df_labeled['lastValue'] = df_labeled['value'].shift(1) #add's previous value to current row
df_labeled[['ticker', 'periodDate', 'value', 'lastValue']]
它适用于第一项:
ticker periodDate value lastValue
Abc 2010 121000.0 NaN
Abc 2011 125700.0 121000.0
xyz 2010 125000.0 125700.0
xyz 2011 125700.0 125000.0
如您所见, xyz 应该是 NaN ,但它是数据框中最后一项的前一个值。
有没有办法有条件地设置它?即如果df_labeled['ticker'] == df_labeled['ticker'].shift(1)
解决方案
如果我理解正确,您想value
根据列移动ticker
列:
df['lastValue'] = df.groupby(['ticker'], as_index=False)['value'].shift(1)
print(df)
印刷:
ticker periodDate value lastValue
0 Abc 2010 121000.0 NaN
1 Abc 2011 125700.0 121000.0
2 xyz 2010 125000.0 NaN
3 xyz 2011 125700.0 125000.0
推荐阅读
- javascript - 如何在本机反应中创建 Dragabble 列表?
- jenkins - 在 Jenkins Pipeline 视图中对并行阶段进行分组
- javascript - 如何清理 useffect 调用中的函数?
- python - setup.py 在分类器中包含许可证,但安装的轮子有 license=UNKNOWN
- java - 将 Spring Boot 升级到 2.3.0 时出现 Spring 数据问题
- c# - 在没有互联网的 Visual Studio 2015 中构建项目
- c++ - c ++使用递归而不是for循环
- c# - 是否可以在 C# 中删除对象?
- python - Python Bokeh - 使用两个同步的选择小部件过滤表
- alexa - 在特定 Alexa 设备上触发通知