我有一個大資料集,我正在使用從 Excel 中提取的 Pandas。
資料包含每個部分的標題和每個單元下面的相關資料,即
<index> | Date/Time| UnitNo. | Reading
0 | NaN | UnitBc36 | NaN
1 | 1/1/2021 | NaN | 100
2 | 1/1/2021 | NaN | 300
...
260253 | NaN | UnitAN95 | NaN
272644 | 3/1/2021 | NaN | 150
我已經能夠通過識別 UnitNo. 列不是 NaN:
Loc = df[df["UnitNo."].notnull()]
In: Loc.index
Out: ([ 0, 12393, 24786, 37179, 49572, 61965, 74358, 86751,
99144, 111537, 123930, 136323, 148716, 161109, 173502, 185895,
198288, 210681, 223074, 235467, 247860, 260253],
dtype='int64')
我還有一個將每個索引與相關標頭值匹配的資料框。
我想使用此資訊將單元號作為新列附加到每行資料,以便稍后我可以根據此資訊進行分組并分析每個單元。
例如,索引 0 和 12393 之間的所有行(上面的 Loc.index[0] 和 Loc.index[1])都應該將 UnitBc36 作為新列。260253 和最后一行(上面的 Loc.index[21])之間的所有單元都應該在新列中包含 UnitAN95。見下文:
<index> | Date/Time| UnitNo. | Reading | UnitNo._new_col
0 | NaN | UnitBc36 | NaN | UnitBc36
1 | 1/1/2021 | NaN | 100 | UnitBc36
2 | 1/1/2021 | NaN | 300 | UnitBc36
...
260253 | NaN | UnitAN95 | NaN | UnitAN95
272644 | 3/1/2021 | NaN | 150 | UnitAN95
任何人都可以就解決上述問題的最佳方式提供幫助嗎?
我目前正在通過使用大量條件陳述句手動執行此操作,但這對于具有不同單元數的不同資料大小是不可擴展的。
任何幫助將不勝感激,并很樂意在需要時進一步澄清。
謝謝,杰克
uj5u.com熱心網友回復:
使用ffill(或fillna(method='ffill')):
df['UnitNo._new_col'] = df['UnitNo.'].ffill()
print(df)
# Output:
Date/Time UnitNo. Reading UnitNo._new_col
0 NaN UnitBc36 NaN UnitBc36
1 1/1/2021 NaN 100.0 UnitBc36
2 1/1/2021 NaN 300.0 UnitBc36
260253 NaN UnitAN95 NaN UnitAN95
272644 3/1/2021 NaN 150.0 UnitAN95
更進一步,也許你想要:
out = df.assign(**{'UnitNo.': df['UnitNo.'].ffill()}) \
.loc[lambda x: x['Date/Time'].notna()]
print(out)
# Output:
Date/Time UnitNo. Reading
1 1/1/2021 UnitBc36 100.0
2 1/1/2021 UnitBc36 300.0
272644 3/1/2021 UnitAN95 150.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/360283.html
上一篇:生成資料框列,其中每一列都是前一列的shift(-1)
下一篇:根據條件創建具有布林值的列
