python - 如何访问熊猫数据框中前几行的数据?
问题描述
我正在尝试访问前一行(或更后一行)以用作新列中的值。尝试了几种使用 enumerate、iterrows 和 iloc 的方法,但最终遇到了同样的问题,它们使用了最后一个值。使用以下代码:
df = pd.DataFrame({'values':(50.033,50.025,49.979,49.954,49.936,49.935,49.93)})
df['a']=df.diff()
def my_func_disch(x):
if abs(x) >= 0 and abs(x) <= 0.009:
for index,row in df.iterrows():
eff_disch = row['values']
else:
eff_disch = 'xxx'
return eff_disch
df["b"] = df.a.apply(my_func_disch)
产生:
values a b
0 50.033 NaN xxx
1 50.025 -0.008 49.93
2 49.979 -0.046 xxx
3 49.954 -0.025 xxx
4 49.936 -0.019 xxx
5 49.935 0.000 49.93
6 49.930 -0.005 49.93
我希望它产生:
values a b
0 50.033 NaN xxx
1 50.025 -0.008 50.033
2 49.979 -0.046 xxx
3 49.954 -0.025 xxx
4 49.936 -0.019 xxx
5 49.935 0.000 49.936
6 49.930 -0.005 49.935
解决方案
不要使用apply
,而是使用 vectorized np.where
,这样更快更易读:
df['b'] = np.where(df['a'].abs().between(0, 0.009, inclusive=True), df['values'].shift(), 'xxx')
# values a b
#0 50.033 NaN xxx
#1 50.025 -0.008 50.033
#2 49.979 -0.046 xxx
#3 49.954 -0.025 xxx
#4 49.936 -0.019 xxx
#5 49.935 0.000 49.93600000000001
#6 49.930 -0.005 49.935
第一个参数指定何时做某事(当abs
是一些值时),第二个和第三个参数分别指定当它是或between
时要返回什么。你想要值列True
False
shifted
您的解决方案不起作用,因为您总是迭代整个 DataFrame (这几乎不是要走的路),只有在迭代最后一行后才停止,因此返回最后一个值。
推荐阅读
- python - 如何在一个项目中使用多个 .py 文件解决方案 Python VS
- graph - Neo4j上的RelationshipEntity和关系之间的区别
- c# - C# 相机帧事件更新图片框是否安全?我收到间歇性错误:“System.Drawing.dll .. 参数无效。”
- highcharts - Highcharts 堆积列不合并相似的数据集
- angular - 如何一次将多个文件上传到 Firebase 存储?
- stdin - openmpi、termios 和标准输入
- javascript - 在退格键上搜索原始数据
- node.js - node.js 中的 try-catch 设置
- apache-spark - 提交 Apache Spark 作业时在 spark.jars 中使用通配符
- python - 使用 Python 抓取 ReferenceUSA