我有幾個不同日期的財務資訊的資料框,看起來像這樣。
symbol split_date date_start date_end marketCap Date Adj Close Volume
0 USAU 2020-03-20 2020-02-28 2020-05-01 45773136 2020-02-28 6.300000190734862 22010.0
1 USAU 2020-03-20 2020-02-28 2020-05-01 45773136 2020-03-02 6.0999999046325675 7300.0
2 USAU 2020-03-20 2020-02-28 2020-05-01 45773136 2020-03-03 6.5 9700.0
3 USAU 2020-03-20 2020-02-28 2020-05-01 45773136 2020-03-04 7.0 13340.0
4 USAU 2020-03-20 2020-02-28 2020-05-01 45773136 2020-03-05 6.9000000953674325 5510.0
5 USAU 2020-03-20 2020-02-28 2020-05-01 45773136 2020-03-06 6.4000000953674325 5790.0
6 USAU 2020-03-20 2020-02-28 2020-05-01 45773136 2020-03-09 6.300000190734862 10080.0
7 USAU 2020-03-20 2020-02-28 2020-05-01 45773136 2020-03-10 6.0 14630.0
8 USAU 2020-03-20 2020-02-28 2020-05-01 45773136 2020-03-11 5.300000190734863 20160.0
9 USAU 2020-03-20 2020-02-28 2020-05-01 45773136 2020-03-12 4.699999809265137 17390.0
在這個資料框中,我有 577 個不同的符號(不僅僅是USAU)。列中的所有日期Date都是不同的范圍,因為它們都以發生的特定事件為中心。
我正在嘗試創建一個列,對于資料集中具有唯一日期范圍的每個代碼,為分組日期分配一個整數(1-10)。
偽代碼:
for symbol in symbols_in_dataframe:
convert date of symbol to integer
# IE
# Symbol: A YYYY/MM/01 -> 1
# Symbol: A YYYY/MM/02 -> 2
# .....
# Symbol: A YYYY/MM/10 -> 10
This loops through each symbol.
# Symbol: B YYYY/MM/01 -> 1
# Symbol: B YYYY/MM/02 -> 2
# .....
# Symbol: B YYYY/MM/10 -> 10
我試了一下,但這不是我想要的結果。
def to_integer(dt_time):
return 10000*dt_time.year 100*dt_time.month dt_time.day
blank_df = pd.dataframe()
for symbol in symbols_in_dataframe:
blank_df.map(symbol, to_integer)
在這里的任何幫助將不勝感激。
編輯:
資料框的預期輸出:
symbol split_date date_start date_end marketCap Date Adj Close Volume Num_seq
0 USAU 2020-03-20 2020-02-28 2020-05-01 45773136 2020-02-28 6.3 22010.0 1
1 USAU 2020-03-20 2020-02-28 2020-05-01 45773136 2020-03-02 6.1 7300.0 2
2 USAU 2020-03-20 2020-02-28 2020-05-01 45773136 2020-03-03 6.5 9700.0 3
44 INLX 2020-03-20 2020-02-28 2020-05-01 19112184 2020-02-21 4.50 0.0 1
45 INLX 2020-03-20 2020-02-28 2020-05-01 19112184 2020-02-24 4.00 600.0 2
46 INLX 2020-03-20 2020-02-28 2020-05-01 19112184 2020-02-25 4.00 20.0 3
95 OMWS 2020-03-19 2020-02-27 2020-04-30 92829984 2021-04-12 0.25 1000.0 1
96 OMWS 2020-03-19 2020-02-27 2020-04-30 92829984 2021-04-14 0.25 6502.0 2
97 OMWS 2020-03-19 2020-02-27 2020-04-30 92829984 2021-04-16 0.25 0.0 3
本質上,對于 的每個實體symbol,我都在嘗試為資料幀中的每個符號分配一個計數Num_seq,如果有意義的話,這里可以看到按順序排列的數字。
您應該可以使用上述資料框作為參考。
使用評論中的代碼示例進行編輯:
似乎它正在以交替格式對資料幀上的每個其他索引條目進行重復和排序。不過,我不完全確定代碼正在編輯什么,因為split_date, date_start, 并且date_end不應該更改。
symbol split_date date_start date_end marketCap Date Adj Close Volume seq
44 INLX 2020-03-20 2020-02-28 2020-05-01 19112184 2020-02-21 4.500000 0.0 1
68 INLX 2020-03-13 2020-02-21 2020-04-24 19112184 2020-02-21 4.500000 0.0 1
45 INLX 2020-03-20 2020-02-28 2020-05-01 19112184 2020-02-24 4.000000 600.0 2
69 INLX 2020-03-13 2020-02-21 2020-04-24 19112184 2020-02-24 4.000000 600.0 2
46 INLX 2020-03-20 2020-02-28 2020-05-01 19112184 2020-02-25 4.000000 20.0 3
70 INLX 2020-03-13 2020-02-21 2020-04-24 19112184 2020-02-25 4.000000 20.0 3
47 INLX 2020-03-20 2020-02-28 2020-05-01 19112184 2020-02-26 4.000000 0.0 4
71 INLX 2020-03-13 2020-02-21 2020-04-24 19112184 2020-02-26 4.000000 0.0 4
uj5u.com熱心網友回復:
這是一種使用groupby并cumsum為每個唯一符號中的每個唯一日期分配遞增數字的方法。不確定這是否正是您想要的,如果我誤解了請發表評論
這是一個與您發布的資料集相似的示例
df = pd.DataFrame({
'symbol':['a','a','a','b','b','b','c','c'],
'values':[8,9,9,9,10,11,12,13]
})
df = df.sort_values(['symbol','values']) #if table is not already sorted. for you it would be ['symbol','Date']
df['x'] = (
df.groupby('symbol')['values'] #group by symbol
.transform(lambda v: (~v.duplicated()).cumsum()) #assign numbers, avoiding duplicate counting
)
print(df)
輸出:
symbol values x
0 a 8 1
1 a 9 2
2 a 9 2
3 b 9 1
4 b 10 2
5 b 11 3
6 c 12 1
7 c 13 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/424149.html
標籤:python-3.x 熊猫 麻木的 金融
