python - 大熊猫抓取价值以填充新列
问题描述
如果一天的“A”大于前一天的“A”,我正在尝试获取具有条件 B 值的新列 B 和 C。否则,该值将为负数(C 列)。
这是我想要得到的一个例子:
A B C
0. 167765
1. 235353 235353
2. 89260 89260
3. 188382 188382
4. 104677 104677
5. 207723 207723
我注意到这会导致索引错误,因为 B 列和 C 列中的数据数将与原始 A 列不同。
目前,我正在通过这个测试将特定数据移动到 B 列,这导致值的长度与索引错误的长度不匹配:
df['B'] = np.where(df['A'] <= 250000)
如何在第一行为 NA 或为空的情况下完成所需的输出?
所需的输出:
B C
0.
1. 235353
2. 89260
3. 188382
4. 104677
5. 207723
解决方案
我无法理解您如何通过您描述的方法获得最终结果
据我了解,如果值大于前一天的值,则应将值放在 B 列中。否则在 C 列。
如果您的意思不同,您可能需要纠正我或调整此答案。
诀窍在于在.where
pandasSeries
对象上使用,它会自动插入NaN
s。
df = pd.DataFrame({'A': [167765, 235353, 89260, 188382, 104677, 207723]})
diffs = df['A'].diff()
df['B'] = df['A'].where(diffs >= 0)
df['C'] = df['A'].where(diffs < 0)
diffs
将是以下内容,第一行Series
也有一个方便的。NaN
0 NaN
1 67588.0
2 -146093.0
3 99122.0
4 -83705.0
5 103046.0
Name: A, dtype: float64
与NaN
总是返回比较False
。因此,我们可以通过分别比较正负来省略第一行。
结果表如下所示
A B C
0 167765 NaN NaN
1 235353 235353.0 NaN
2 89260 NaN 89260.0
3 188382 188382.0 NaN
4 104677 NaN 104677.0
5 207723 207723.0 NaN
推荐阅读
- javascript - 使用模式使用 faker.js 生成假数据?
- c - 需要关于我的代码在链表中创建函数和删除函数的帮助吗?C 编程新手
- python - 如何查找一组对象是否共享一个属性,可以是两个属性中的任何一个?
- javascript - 将地图上的点定位到国家
- hex - 使用 UART 干扰从终端接收十六进制数据
- asp.net - DynamoDb.net:添加 In Operator ,并以正确的方式获取多个值
- javascript - C# 中的 RSA 加密与其他语言不同
- c++ - 试图弄清楚如何使用 getline() 将项目读入文件:一种方法有效,但另一种方法无效
- c# - 在图库中选择多个图像并使用 MVVM Prism 在屏幕上显示它的预览
- c# - 如何在 WPF 应用程序启动时处理 IO 繁重的工作负载