我有一個這樣的資料框:
Date A B C
2021-08-20 1 2 3
2021-08-21 2 3 4
2021-08-22 3 4 5
2021-08-23 4 5 6
2021-08-24 7 8 9
2021-08-25 10 11 12
2021-08-26 11 12 13
2021-08-28 12 13 14
我的“目標”部分是從 2021-08-21 到 2021-08-24。
現在我有一個位置索引串列:
A = [0, 1, 3, 4, 6, 7]
我要做的是創建一個新的索引串列,該串列僅與我的目標部分中的索引相對應,然后在新串列中找到元素的總數。
目標答案:
new_list = [1, 3, 4]
print(len(new_list))
3
到目前為止,我已經嘗試過:
new_list = []
df_range = df.loc['2021-08-21':'2021-08-24']
for data_idx in A:
if data_idx == df_range.iloc[data_idx]:
new_list.append(data_idx)
print(len(new_list))
但是我得到 IndexErrors(單個位置索引器超出范圍)或 Key 錯誤(對于類似的嘗試)。我相信當程式試圖定位超出此范圍的索引時會出現什么錯誤?
提前感謝您,如果有任何令人困惑的地方,我們深表歉意。我知道應該有一個簡單的方法來做到這一點,但我就是想不通。
uj5u.com熱心網友回復:
國際大學聯盟:
A = [0, 1, 3, 4, 6, 7]
df["tmp"] = range(len(df))
x = df.loc["2021-08-21":"2021-08-24"]
print(x.loc[x["tmp"].isin(A), "tmp"].to_list())
印刷:
[1, 3, 4]
uj5u.com熱心網友回復:
如果我理解了這個問題,您想要一個串列,其中包含與您的df_range? 如果是這樣,這兩種方法通常用于
new_list = []
df_range = df.loc['2021-08-21':'2021-08-24']
for i, v in enumerate(df_range):
new_list.append(i)
for i in range(len(df_range)):
new_list.append(i)
uj5u.com熱心網友回復:
如果 'Date' 在資料幀的索引中并且資料型別是日期時間索引,那么我們可以使用pd.Index.get_indexer和使用集合操作來查找交集。
#Copy dataframe from question above
df = pd.read_clipboard(index_col=[0])
df.index = pd.to_datetime(df.index)
idx = df.index.get_indexer(pd.date_range('2021-08-21', '2021-08-24', freq='D'))
A = [0, 1, 3, 4, 6, 7]
overlap = set(A) & set(idx)
print(f'{overlap=} and {len(overlap)=}')
輸出:
overlap={1, 3, 4} and len(overlap)=3
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/463636.html
標籤:python-3.x 熊猫 列表 数据框 索引
