質問するログイン新規登録

回答編集履歴

4

欠損処理忘れていたので追加

2020/10/18 12:43

投稿

barobaro
barobaro

スコア1286

answer CHANGED
@@ -47,7 +47,8 @@
47
47
 
48
48
  df_diff = df1.groupby("SymbolName").diff()
49
49
 
50
+ # 上昇2、下降1、変動なし3、欠損None
50
- df_diff["Sign"] = df_diff["CalcPrice"].apply(lambda x: 1 if x < 0 else 2 if x > 0 else 3)
51
+ df_diff["Sign"] = df_diff["CalcPrice"].apply((lambda x: 1 if x < 0 else 2 if x > 0 else 3 if x == 0 else None))
51
52
 
52
53
  # 30秒以内変動がないものを欠損
53
54
  df_diff["Sign"] = df_diff["Sign"].mask((df_diff["CurrentPriceTime"] < pd.Timedelta(seconds=30)) & (df_diff["Sign"] == 3))

3

30秒の条件訂正

2020/10/18 12:43

投稿

barobaro
barobaro

スコア1286

answer CHANGED
@@ -50,7 +50,7 @@
50
50
  df_diff["Sign"] = df_diff["CalcPrice"].apply(lambda x: 1 if x < 0 else 2 if x > 0 else 3)
51
51
 
52
52
  # 30秒以内変動がないものを欠損
53
- df_diff["Sign"] = df_diff["Sign"].mask((df_diff["CurrentPriceTime"] > pd.Timedelta(seconds=30)) & (df_diff["Sign"] == 3))
53
+ df_diff["Sign"] = df_diff["Sign"].mask((df_diff["CurrentPriceTime"] < pd.Timedelta(seconds=30)) & (df_diff["Sign"] == 3))
54
54
 
55
55
  # 時間外を0
56
56
  df_diff.loc[~InTime, "Sign"] = 0

2

勘違いしていたので修正

2020/10/18 04:34

投稿

barobaro
barobaro

スコア1286

answer CHANGED
@@ -1,5 +1,5 @@
1
- 9:00から15:00の内11:30から12:30は除外
1
+ 9:00から15:00の内11:30から12:30は0
2
- 同一銘柄の30秒以内に変動があったものを上がったら2、下がったら1、変動なしは欠損にしています
2
+ 同一銘柄のを上がったら2、下がったら1、変動なしのうち30秒以上3、30秒以内は欠損にしています
3
3
 
4
4
  ```python
5
5
  import datetime
@@ -36,23 +36,26 @@
36
36
 
37
37
  df["CurrentPriceTime"] = pd.to_datetime(df["CurrentPriceTime"]).dt.tz_localize(None)
38
38
 
39
- df["InTime"] = df["CurrentPriceTime"].dt.time.apply(
39
+ InTime= df["CurrentPriceTime"].dt.time.apply(
40
40
  lambda d: (datetime.time(8) < d < datetime.time(11, 30))
41
41
  | (datetime.time(12, 30) < d < datetime.time(15))
42
42
  )
43
43
 
44
- df1 = df.loc[df["InTime"], ["SymbolName", "CurrentPriceTime", "CalcPrice"]]
44
+ df1 = df.loc[:, ["SymbolName", "CurrentPriceTime", "CalcPrice"]]
45
45
 
46
46
  df1
47
47
 
48
48
  df_diff = df1.groupby("SymbolName").diff()
49
49
 
50
- # 30秒以上は欠損
51
- df_diff["CalcPrice"] = df_diff["CalcPrice"].where(
50
+ df_diff["Sign"] = df_diff["CalcPrice"].apply(lambda x: 1 if x < 0 else 2 if x > 0 else 3)
52
- df_diff["CurrentPriceTime"] < pd.Timedelta(seconds=30)
53
- )
54
51
 
52
+ # 30秒以内変動がないものを欠損
55
- df["Sign"] = df_diff["CalcPrice"].apply(lambda x: 1 if x < 0 else 2 if x > 0 else pd.NA)
53
+ df_diff["Sign"] = df_diff["Sign"].mask((df_diff["CurrentPriceTime"] > pd.Timedelta(seconds=30)) & (df_diff["Sign"] == 3))
56
54
 
55
+ # 時間外を0
56
+ df_diff.loc[~InTime, "Sign"] = 0
57
+
58
+ df["Sign"] = df_diff["Sign"]
59
+
57
60
  df
58
61
  ```

1

抽出の書き方変更

2020/10/18 04:08

投稿

barobaro
barobaro

スコア1286

answer CHANGED
@@ -41,7 +41,7 @@
41
41
  | (datetime.time(12, 30) < d < datetime.time(15))
42
42
  )
43
43
 
44
- df1 = df[df["InTime"]].loc[:, ["SymbolName", "CurrentPriceTime", "CalcPrice"]]
44
+ df1 = df.loc[df["InTime"], ["SymbolName", "CurrentPriceTime", "CalcPrice"]]
45
45
 
46
46
  df1
47
47