python - Pandas - 根据逻辑语句定位值
问题描述
我正在将此数据集用于项目。
我试图找到数据集 34 天持续时间内每个逆变器的总产量(基本上使用每个逆变器可用的最终值和初始值)。我已经能够获得使用的逆变器列表pd.unique()
(每个太阳能发电厂有 22 个逆变器。
我无法查询total_yield
每个逆变器的数据。这是我尝试过的:
def get_yields(arr: np.ndarray, df:pd.core.frame.DataFrame) -> np.ndarray:
delta = np.zeros(len(arr))
index =0
for i in arr:
initial = df.loc[df["DATE_TIME"]=="15-05-2020 02:00"]
initial = initial.loc[initial["INVERTER_ID"]==i]
initial.reset_index(inplace=True,drop=True)
initial = initial.at[0,"TOTAL_YIELD"]
final = df.loc[(df["DATE_TIME"]=="17-06-2020 23:45")]
final = final.loc[final["INVERTER_ID"]==i]
final.reset_index(inplace=True, drop=True)
final = final.at[0,"TOTAL_YIELD"]
delta[index] = final - initial
index = index + 1
return delta
参考:arr
是逆变器阵列,如下所列。df
是每个植物的生成数据框。
问题是并非每个逆变器都有每个间隔的数据点。这使得此功能仅适用于第一个工厂的逆变器,而不适用于第二个工厂。
我的第二种方法是先通过逆变器进行过滤,然后获取第一个和最后一个数据点。但是我收到一个错误'Series' objects are mutable, thus they cannot be hashed
-到目前为止,这是代码:
def get_yields2(arr: np.ndarray, df: pd.core.frame.DataFrame) -> np.ndarry:
delta = np.zeros(len(arr))
index = 0
for i in arr:
initial = df.loc(df["INVERTER_ID"] == i)
index += 1
break
return delta
1厂逆变器列表供参考(标记为SOURCE_KEY
):
['1BY6WEcLGh8j5v7' '1IF53ai7Xc0U56Y' '3PZuoBAID5Wc2HD' '7JYdWkrLSPkdwr4'
'McdE0feGgRqW7Ca' 'VHMLBKoKgIrUVDU' 'WRmjgnKYAwPKWDb' 'ZnxXDlPa8U1GXgE'
'ZoEaEvLYb1n2sOq' 'adLQvlD726eNBSB' 'bvBOhCH3iADSZry' 'iCRJl6heRkivqQ3'
'ih0vzX44oOqAx2f' 'pkci93gMrogZuBj' 'rGa61gmuvPhdLxV' 'sjndEbLyjtCKgGv'
'uHbuxQJl8lW7ozc' 'wCURE6d3bPkepu2' 'z9Y9gH1T5YWrNuG' 'zBIq5rxdHJRwDNY'
'zVJPv84UY57bAof' 'YxYtjZvoooNbGkE']
2厂逆变器列表:
['4UPUqMRk7TRMgml' '81aHJ1q11NBPMrL' '9kRcWv60rDACzjR' 'Et9kgGMDl729KT4'
'IQ2d7wF4YD8zU1Q' 'LYwnQax7tkwH5Cb' 'LlT2YUhhzqhg5Sw' 'Mx2yZCDsyf6DPfv'
'NgDl19wMapZy17u' 'PeE6FRyGXUgsRhN' 'Qf4GUc1pJu5T6c6' 'Quc1TzYxW2pYoWX'
'V94E5Ben1TlhnDV' 'WcxssY2VbP4hApt' 'mqwcsP2rE7J0TFp' 'oZ35aAeoifZaQzV'
'oZZkBaNadn6DNKz' 'q49J1IKaHRwDQnt' 'rrq4fwE8jgrTyWY' 'vOuJvMaM2sgwLmb'
'xMbIugepa2P7lBB' 'xoJJ8DcxJEcupym']
非常感谢。
解决方案
我无法下载数据集来测试这一点。收到“To May Requests”错误。
但是,您应该能够使用groupby
.
import pandas as pd
result = df.groupby('INVERTER_ID')['TOTAL_YIELD'].agg(['max','min'])
result['delta'] = result['max']-result['min']
print(result[['delta']])
推荐阅读
- css - 在道具上更新样式组件的样式变化缓慢?
- sql - 日、类别聚合的最大值?
- javascript - 异步等待中未捕获类型错误
- jenkins - Surefire:测试目标不选择测试
- c++ - 是否可以从 C++ 中的回调函数影响局部变量?
- python - Python Matplotlib线图:改变中间的线条颜色
- javascript - 使用 datepicker 在 javascript 中更改开始日期时,结束日期不会更改
- javascript - 数组过滤器不适用于状态
- mariadb - mysql窗口功能在生产服务器上工作,而不是在Raspberry Pi上
- node.js - Node.js 应用程序在 Plesk-Onyx 上给出 504