私はDataFrame
ですが、その行は交通事故を表しています。列の2はWeather
とSkidding
次のとおりです。パンダでは、別の列の値のセットを与えられた1つの列の値の集合の確率を計算する方法は?
import pandas as pd
df = pd.DataFrame({'Weather': ['rain', 'fine', 'rain', 'fine', 'snow', 'fine', 'snow'],
'Skidding': ['skid', 'skid', 'no skid', 'no skid', 'skid', 'no skid', 'jackknife']})
私はそれはそれがないときに比べて雨や雪が降っている時に横滑りやジャックナイフ現象のいずれかが発生することがあるどのくらいの可能性が高い計算したいと思います。
df_rainsnow = df[[weather in ('rain', 'snow') for weather in df.Weather]]
df_rainsnow_skid = df_rainsnow[[skid in ('skid', 'jackknife') for skid in df_rainsnow.Skidding]]
df_fine = df[df.Weather == 'fine']
df_fine_skid = df_fine[[skid in ('skid', 'jackknife') for skid in df_fine.Skidding]]
relative_probability = len(df_rainsnow_skid)/len(df_fine_skid)
この例では3.0
のrelative_probability
と評価されます。これまでのところ私は、ブールインデックスと4つの補助データフレームを用いて溶液を作ってみました。しかし、これは不必要に冗長なようですが、私はそれをリファクタリングしたいと思います。私が試した
一つの解決策は、これは、すべての気象状況では発生しませんKeyError
jackknife
ためにつながり、そしてとにかくまた、すべての用語を書き出すことが冗長である、しかし
counts = df.groupby('Weather')['Skidding'].value_counts()
relative_probability = (counts['rain']['skid'] + counts['snow']['skid']
+ counts['rain']['jackknife'] + counts['snow']['jackknife'])/(counts['fine']['skid'] + counts['fine']['jackknife'])
です。これを達成するためのよりよい方法は何ですか?
https://stackoverflow.com/questions/29757551/pandas-indexing-using -multiple-isin-clauses –