2
我需要根據不同列的值減去行的值。我的數據框看起來是這樣的:基於Python中的列值減去行的最佳方式
Id | col1 | col2 | col3 |
1 | 2016-01-02 | 7:00:00 | Yes |
1 | 2016-01-02 | 7:05:00 | No |
1 | 2016-01-02 | 7:10:00 | Yes |
1 | 2016-01-02 | 8:00:00 | No |
2 | 2016-01-02 | 7:10:00 | Yes |
2 | 2016-01-02 | 7:50:00 | No |
2 | 2016-01-02 | 9:00:00 | No |
2 | 2016-01-02 | 9:10:00 | No |
2 | 2016-01-02 | 9:15:00 | No |
3 | 2016-01-02 | 6:05:00 | Yes |
3 | 2016-01-02 | 6:10:00 | Yes |
3 | 2016-01-02 | 6:20:00 | Yes |
3 | 2016-01-02 | 6:45:00 | No |
我需要計算的col1
和col2
基礎上col3
值組合的平均時間差。規則如下:
每當有在
col3
一個Yes
做row-next row
的是我迄今所做的簡化版本是遍歷所有的數據幀和值做到這一點:
for i in range(len(df)):
if df['col3'][i] == 'Yes':
date1 = datetime.combine(df['col1'][i], df['col2'][i])
date2 = datetime.combine(df['col1'][i+1], df['col2'][i+1])
dict[df['Id'][i]] = date1-date2
可變dict
僅僅是保存每個不同Id
結果的字典。
因爲我有超過6MM的行,循環需要花費很多時間才能完成,所以我想知道是否有人能夠提出更高效和優雅的解決方案。
謝謝!
是,多更乾淨快速。你能解釋一下mul的功能嗎?我正在查看文檔,但我似乎無法理解它在做什麼。 https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.mul.html –
您可以查看['Series.mul'](http://pandas.pydata.org/pandas -docs/stable/generated/pandas.Series.mul.html),如果是'Yes',則它簡單地爲1;如果不是'Yes',則簡單地爲'0'。 – jezrael