簡體   English   中英

熊貓為每一列選擇不同的行

[英]Pandas select different rows for each column

我有一個由日期和以下三列組成的數據框。

df = pd.DataFrame({'Date': ['01/01/2019', '02/01/2019', '03/01/2019', '04/01/2019', '05/01/2019', '06/01/2019', '07/01/2019', '08/01/2019'],
               'A': [1,2,3,4,5,6,7,8],
               'B': [11,12,13,14,15,16,17,18],
               'C': [21,22,23,24,25,26,27,28]})

我試圖根據日期選擇每列的一部分。 如果未選擇,則返回零。 如下。

df = pd.DataFrame({'Date': ['01/01/2019', '02/01/2019', '03/01/2019', '04/01/2019', '05/01/2019', '06/01/2019', '07/01/2019', '08/01/2019'],
               'A': [1,2,0,0,5,6,7,8],
               'B': [0,0,0,0,0,16,17,18],
               'C': [21,22,0,0,0,0,0,0]})

在示例So中:將'A'切片為01/01/2019至02/01/2019和05/01/2019為08/01/2019(或無末尾切片)。 B將被切片為06/01/2019至08/01/2019(或沒有結束切片,因為這是最后一個數據點.C將被切片為01/01/2019至02/01/2019。

據我了解,您可以嘗試使用df.where()

df['B']=df['B'].where(df.Date.between('06/01/2019','08/01/2019'),0)
print(df)

         Date  A   B   C
0  01/01/2019  1   0  21
1  02/01/2019  2   0  22
2  03/01/2019  3   0  23
3  04/01/2019  4   0  24
4  05/01/2019  5   0  25
5  06/01/2019  6  16  26
6  07/01/2019  7  17  27
7  08/01/2019  8  18  28

您可以對所需的所有列和條件執行相同的操作。

我會生成一個布爾掩碼:

B_dates = df['Dates'][-3:]
df.loc[~df['Date'].isin(B_dates), 'B'] = 0

當然,您可以針對所選的任何日期和列對此進行迭代。

這是在df上運行此代碼並打印的輸出:

     Date      A   B   C
0  01/01/2019  1   0  21
1  02/01/2019  2   0  22
2  03/01/2019  3   0  23
3  04/01/2019  4   0  24
4  05/01/2019  5   0  25
5  06/01/2019  6  16  26
6  07/01/2019  7  17  27
7  08/01/2019  8  18  28

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM