我有一個這樣的excel:
| 年 | 月 | 天 | 時間 | 一種 | b | C |
|---|---|---|---|---|---|---|
| 2020 | 1 | 1 | 00:00 | 12 | 23 | 12 |
| 2020 | 1 | 1 | 01:00 | 31 | 0 | 13 |
| 2020 | 1 | 1 | ... | ... | ... | 14 |
| 2020 | 1 | 1 | 23:00 | ... | ... | 23 |
| 2020 | ... | ... | ... | ... | ... | 24 |
| 2020 | 12 | 31 | 23:00 | 32 | 0 | 35 |
| 2021 | 1 | 1 | 01:00 | 31 | 0 | 46 |
| 2021 | 1 | 1 | ... | ... | ... | 56 |
| 2021 | 1 | 1 | 23:00 | ... | ... | 45 |
| 2021 | ... | ... | ... | ... | ... | 34 |
| 2021 | 12 | 31 | 23:00 | 32 | 0 | 45 |
我要獲取資料: a >= 30 和 b==0 的行的 c 之和按年份分組注意只要有時間滿足 a >= 30 和 b==0,我們就可以計算這一天
我想使用 pandas 資料框來實作這個,有人可以幫忙嗎?我對python很陌生
uj5u.com熱心網友回復:
首先,需要讀取資料。
如果“excel”是指檔案.xlsx,考慮到檔案名為data.xlsx,將檔案讀入資料幀pandas.read_excel
df1 = pd.read_excel('data.xlsx')
如果“excel”是指檔案.csv,假設檔案名為data.csv,則將檔案讀入資料框pandas.read_csv
df1 = pd.read_csv('data.csv')
一旦您將 Excel 資料放入資料框中,現在是時候在此基礎上運行查詢了。
為了獲得僅包含 a>= 30 和 b== 0 的行的資料框,請執行以下操作
df2 = df1[(df1['a'] >= 30) & (df1['b'] == 0)]
現在,考慮到您想按年、月和日排序(如您所提到pandas.to_datetime的),可以使用as在資料框中生成一個新列
df3['date'] = pd.to_datetime(df2[['year', 'month', 'day']])
然后,使用上面過濾的新資料框,我們添加了一個新列,可以date使用按變數/列分組pandas.DataFrame.groupby,然后將列/變數的值c與pandas.DataFrame.sumas相加
df4['sum_c'] = df3.groupby('date')['c'].sum()
最終的資料框是df4, 并列印它
print(df4)
注意:為了讓您更容易理解,任何時候進行重大更改時,都會創建一個新的資料框。
uj5u.com熱心網友回復:
首先按條件過濾行,boolean indexing然后聚合sum列c:
df['datetime'] = pd.to_datetime(df[['year','month','day']])
df1 = df[(df.a>=30) & (df.b==0)].groupby('datetime', as_index=False)['c'].sum()
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/467224.html
下一篇:基于R中的行列相似性修剪資料框
