- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 pandas 中有一个这样组织的数据框:
btc_price['btc_price'] = pd.to_numeric(btc_price['btc_price'].str.replace(',', ''))
btc_price.head(n=120)
Out[4]:
btc_price
time
2017-08-27 22:50:00 4,389.6113
2017-08-27 22:51:00 4,389.0850
2017-08-27 22:52:00 4,388.8625
2017-08-27 22:53:00 4,389.7888
2017-08-27 22:56:00 4,389.9138
2017-08-27 22:57:00 4,390.1663
2017-08-27 22:58:00 4,390.2600
2017-08-27 22:59:00 4,392.4013
2017-08-27 23:00:00 4,391.6588
2017-08-27 23:01:00 4,391.9213
2017-08-27 23:02:00 4,394.0113
2017-08-27 23:03:00 4,396.9713
2017-08-27 23:04:00 4,397.3350
2017-08-27 23:05:00 4,397.0700
2017-08-27 23:06:00 4,398.6188
2017-08-27 23:07:00 4,398.5725
2017-08-27 23:08:00 4,397.4713
2017-08-27 23:09:00 4,398.0938
2017-08-27 23:10:00 4,398.7775
2017-08-27 23:11:00 4,398.0200
2017-08-27 23:12:00 4,397.9513
2017-08-27 23:13:00 4,398.0613
2017-08-27 23:14:00 4,398.0900
2017-08-27 23:15:00 4,398.0063
2017-08-27 23:16:00 4,397.6088
2017-08-27 23:17:00 4,394.3763
2017-08-27 23:46:00 4,389.1100
2017-08-27 23:48:00 4,390.6763
2017-08-27 23:49:00 4,392.5388
2017-08-27 23:49:00 4,392.5388
...
2017-08-28 00:51:00 4,367.5738
2017-08-28 00:51:00 4,367.5738
2017-08-28 00:52:00 4,367.7888
2017-08-28 00:53:00 4,368.4188
2017-08-28 00:54:00 4,368.8225
2017-08-28 00:55:00 4,368.7438
2017-08-28 00:57:00 4,368.4700
2017-08-28 00:58:00 4,367.9963
2017-08-28 00:59:00 4,366.4750
2017-08-28 01:00:00 4,359.1988
2017-08-28 01:01:00 4,355.2825
2017-08-28 01:02:00 4,352.3675
2017-08-28 01:03:00 4,354.2188
2017-08-28 01:04:00 4,353.5263
2017-08-28 01:05:00 4,354.2488
2017-08-28 01:06:00 4,358.8063
2017-08-28 01:07:00 4,359.5738
2017-08-28 01:08:00 4,361.7313
2017-08-28 01:09:00 4,360.8638
2017-08-28 01:10:00 4,363.0750
2017-08-28 01:11:00 4,362.3375
2017-08-28 01:12:00 4,362.3338
2017-08-28 01:13:00 4,358.8000
2017-08-28 01:14:00 4,354.0463
2017-08-28 01:15:00 4,356.1950
2017-08-28 01:16:00 4,359.5975
2017-08-28 01:17:00 4,360.1588
2017-08-28 01:18:00 4,362.2338
2017-08-28 01:19:00 4,363.7900
2017-08-28 01:20:00 4,362.6150
我想创建一个值为 -1,0,1 的新列 change
。这些应该对应于过去一小时内价格下跌 5% (-1)、“无变化”(0) 以及过去一小时内价格上涨 5%(1)。此外,一小时的值应该是可变的,因此我可以将其更改为一天或 30 分钟,我认为合适。
我发现了类似的问题here和 here但我是 python 的新手,不太确定如何将这些解决方案专门应用于我的问题。
另一种选择是计算每小时的平均价格,然后计算每小时的百分比变化,但我更希望能够使用滚动时间范围。
我也曾尝试在 R 中执行此操作,但没有成功。请帮忙。
我开始尝试:
btc_price['change'] = btc_price.pct_change(periods=60, fill_method='pad', limit=None, freq=None)
这行得通,但并不能完全满足我的需求,我想将每个值与过去“时间范围”的最小值和最大值进行比较,并根据该值计算百分比变化,而不是简单地进行比较两行。
我想要结束的是这样的(不完整):
# Calculate the % change in btc_price
def calc_change(df):
array = df.values
a = array[:,1]
# Apply % change comparison to timeframe
def rolling(df, period, func, min_periods = None):
if min_periods is None:
min_periods = period
result = pd.Series(np.nan, index = df.index)
for i in range(1, len(df) + 1):
sub_df = df.iloc[max(i)]
我相信我可以使用类似df.rolling()
的东西找到here但不太确定这是否正是我想要的,因为我不太了解它是如何工作的。一个解释会很好。
最佳答案
pd.read_clipboard
导入它pd.to_numeric
进行转换。获得有效数据后,您可以:
In [59]: df.head()
Out[59]:
btc_price
time
2017-09-07 22:50:00 4389.6113
2017-09-07 22:51:00 4389.0850
2017-09-07 22:52:00 4388.8625
2017-09-07 22:53:00 4389.7888
2017-09-07 22:56:00 4389.9138
In [60]: df = df.resample('1MIN').ffill(); df.head(10)
Out[60]:
btc_price
time
2017-09-07 22:50:00 4389.6113
2017-09-07 22:51:00 4389.0850
2017-09-07 22:52:00 4388.8625
2017-09-07 22:53:00 4389.7888
2017-09-07 22:54:00 4389.7888
2017-09-07 22:55:00 4389.7888
2017-09-07 22:56:00 4389.9138
2017-09-07 22:57:00 4390.1663
2017-09-07 22:58:00 4390.2600
2017-09-07 22:59:00 4392.4013
In [61]: WINDOW = 5 # 5 minutes, you can change to any window you want. Has to match resolution from resample
In [63]: df['change'] = df['btc_price'].pct_change(periods=WINDOW); df.head(10)
Out[63]:
btc_price change
time
2017-09-07 22:50:00 4389.6113 NaN
2017-09-07 22:51:00 4389.0850 NaN
2017-09-07 22:52:00 4388.8625 NaN
2017-09-07 22:53:00 4389.7888 NaN
2017-09-07 22:54:00 4389.7888 NaN
2017-09-07 22:55:00 4389.7888 0.000040
2017-09-07 22:56:00 4389.9138 0.000189
2017-09-07 22:57:00 4390.1663 0.000297
2017-09-07 22:58:00 4390.2600 0.000107
2017-09-07 22:59:00 4392.4013 0.000595
In [64]: import numpy as np
]n [67]: df['change_label'] = pd.cut(df['change'], [np.NINF, -0.05, 0.05, np.PINF], labels=['below 5%', 'around 0%', 'above 5%'])
In [69]: df.head(10)
Out[69]:
btc_price change change_label
time
2017-09-07 22:50:00 4389.6113 NaN NaN
2017-09-07 22:51:00 4389.0850 NaN NaN
2017-09-07 22:52:00 4388.8625 NaN NaN
2017-09-07 22:53:00 4389.7888 NaN NaN
2017-09-07 22:54:00 4389.7888 NaN NaN
2017-09-07 22:55:00 4389.7888 4.043638e-05 around 0%
2017-09-07 22:56:00 4389.9138 1.888321e-04 around 0%
2017-09-07 22:57:00 4390.1663 2.970701e-04 around 0%
2017-09-07 22:58:00 4390.2600 1.073400e-04 around 0%
2017-09-07 22:59:00 4392.4013 5.951311e-04 around 0%
感觉你需要:
重新采样
以获得可预测的分辨率FFill
为了没有漏洞。或者以其他对您的情况有意义的方式处理。pct_change
。pd.cut
。此外,简单的 df['change'].map(lamba v: # here logic)
会起作用。关于python - Pandas 计算滚动时间范围内的百分比变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46098931/
pandas.crosstab 和 Pandas 数据透视表似乎都提供了完全相同的功能。有什么不同吗? 最佳答案 pivot_table没有 normalize争论,不幸的是。 在 crosstab
我能找到的最接近的答案似乎太复杂:How I can create an interval column in pandas? 如果我有一个如下所示的 pandas 数据框: +-------+ |
这是我用来将某一行的一列值移动到同一行的另一列的当前代码: #Move 2014/15 column ValB to column ValA df.loc[(df.Survey_year == 201
我有一个以下格式的 Pandas 数据框: df = pd.DataFrame({'a' : [0,1,2,3,4,5,6], 'b' : [-0.5, 0.0, 1.0, 1.2, 1.4,
所以我有这两个数据框,我想得到一个新的数据框,它由两个数据框的行的克罗内克积组成。正确的做法是什么? 举个例子:数据框1 c1 c2 0 10 100 1 11 110 2 12
TL;DR:在 pandas 中,如何绘制条形图以使其 x 轴刻度标签看起来像折线图? 我制作了一个间隔均匀的时间序列(每天一个项目),并且可以像这样很好地绘制它: intensity[350:450
我有以下两个时间列,“Time1”和“Time2”。我必须计算 Pandas 中的“差异”列,即 (Time2-Time1): Time1 Time2
从这个 df 去的正确方法是什么: >>> df=pd.DataFrame({'a':['jeff','bob','jill'], 'b':['bob','jeff','mike']}) >>> df
我想按周从 Pandas 框架中的列中累积计算唯一值。例如,假设我有这样的数据: df = pd.DataFrame({'user_id':[1,1,1,2,2,2],'week':[1,1,2,1,
数据透视表的表示形式看起来不像我在寻找的东西,更具体地说,结果行的顺序。 我不知道如何以正确的方式进行更改。 df示例: test_df = pd.DataFrame({'name':['name_1
我有一个数据框,如下所示。 Category Actual Predicted 1 1 1 1 0
我有一个 df,如下所示。 df: ID open_date limit 1 2020-06-03 100 1 2020-06-23 500
我有一个 df ,其中包含与唯一值关联的各种字符串。对于这些唯一值,我想删除不等于单独列表的行,最后一行除外。 下面使用 Label 中的各种字符串值与 Item 相关联.所以对于每个唯一的 Item
考虑以下具有相同名称的列的数据框(显然,这确实发生了,目前我有一个像这样的数据集!:() >>> df = pd.DataFrame({"a":range(10,15),"b":range(5,10)
我在 Pandas 中有一个 DF,它看起来像: Letters Numbers A 1 A 3 A 2 A 1 B 1 B 2
如何减去两列之间的时间并将其转换为分钟 Date Time Ordered Time Delivered 0 1/11/19 9:25:00 am 10:58:00 am
我试图理解 pandas 中的下/上百分位数计算,但有点困惑。这是它的示例代码和输出。 test = pd.Series([7, 15, 36, 39, 40, 41]) test.describe(
我有一个多索引数据框,如下所示: TQ bought HT Detailed Instru
我需要从包含值“低”,“中”或“高”的数据框列创建直方图。当我尝试执行通常的df.column.hist()时,出现以下错误。 ex3.Severity.value_counts() Out[85]:
我试图根据另一列的长度对一列进行子串,但结果集是 NaN .我究竟做错了什么? import pandas as pd df = pd.DataFrame([['abcdefghi','xyz'],
我是一名优秀的程序员,十分优秀!