2
異なる列の値に基づいて行の値を減算する必要があります。私はcol3
の値に基づいてcol1
とcol2
の組み合わせでの平均時間差を計算する必要が最適な方法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 |
:私のデータフレームは、このようになります。ルールは以下の通りです:
を
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