3 回答

TA貢獻1828條經(jīng)驗 獲得超13個贊
您可以使用函數(shù)式編程的功能,并將函數(shù)應(yīng)用于每一列。這可能會加快速度。同樣,當您timestamps看起來已排序時,可以將它們用作Datarame的索引。
df.set_index('timestamp', inplace=True)
final = []
def func(col):
first = col.first_valid_index()
last = col.last_valid_index()
final.append(col.loc[first:last])
return
df.apply(func)
另外,您可以將所有東西壓緊在一個襯里中:
final = []
df.apply(lambda col: final.append(col.loc[col.first_valid_index() : col.last_valid_index()]))

TA貢獻1880條經(jīng)驗 獲得超4個贊
一種想法是在將索引設(shè)置為之后使用列表或字典理解timestamp。您應(yīng)該對數(shù)據(jù)進行測試,以查看這是否可以解決性能問題。如果您的限制是內(nèi)存,則不太可能有幫助。
df = df.set_index('timestamp')
final = {col: df[col].loc[df[col].first_valid_index(): df[col].last_valid_index()] \
for col in df}
print(final)
{'col1': timestamp
2018-01-01 08:00:00 1.0
2018-01-01 10:00:00 2.0
2018-01-01 12:00:00 3.0
2018-01-01 14:00:00 4.0
2018-01-01 16:00:00 5.0
2018-01-01 18:00:00 6.0
2018-01-01 20:00:00 7.0
2018-01-01 22:00:00 8.0
Name: col1, dtype: float64,
...
'col4': timestamp
2018-01-01 02:00:00 -2.0
2018-01-01 04:00:00 -1.0
2018-01-01 06:00:00 0.0
2018-01-01 08:00:00 1.0
2018-01-01 10:00:00 2.0
2018-01-01 12:00:00 3.0
2018-01-01 14:00:00 4.0
Name: col4, dtype: float64}

TA貢獻1845條經(jīng)驗 獲得超8個贊
我的方法是NaN為每列及其倒數(shù)找到的累加總和,并過濾那些大于的條目0。然后,我進行dict理解以為每一列返回一個數(shù)據(jù)框(如果您愿意,可以將其更改為列表)。
例如,我們有
cols = [c for c in df.columns if c!='timestamp']
result_dict = {c: df[(df[c].notnull().cumsum() > 0) &
(df.ix[::-1,c].notnull().cumsum()[::-1] > 0)][['timestamp', c]]
for c in cols}
添加回答
舉報