2017-12-07 6 views
0

辞書にある日付に応じて、2つの他の列の値をデータフレーム列に入力しようとしています。それは次のようになります。 パンダ - 辞書の日付に応じて列を塗りつぶす

# the input date 
input_date = pd.to_datetime('04.12.2017 12:00:00', format='%d.%m.%Y %H:%M:%S') 

# the dict 
dict = {'A': pd.to_datetime('06.12.2017 12:00:00', format='%d.%m.%Y %H:%M:%S'), 
     'B': pd.to_datetime('08.11.2017 12:00:00', format='%d.%m.%Y %H:%M:%S'), 
     'C': pd.to_datetime('15.10.2017 12:00:00', format='%d.%m.%Y %H:%M:%S'), 

# the df 
d = {'result':[None,None,None], 
    'id_1':[1,2,3], 'id_2':[10,20,30], 
    'dict_key':['A', 'B', 'A']} 
df = pd.DataFrame(d) 

マイ基準

です:入力日付がdictonaryの日付の後であれば、他の結果はこれを希望ID_2

取る、ID_1取ります:

dict_key id_1 id_2 result 
0 A   1  10  10 
1 B   2  20  2 
2 A   3  30  30 

答えて

2

用途:

d1 = {'A': pd.to_datetime('06.12.2017 12:00:00', format='%d.%m.%Y %H:%M:%S'), 
     'B': pd.to_datetime('08.11.2017 12:00:00', format='%d.%m.%Y %H:%M:%S'), 
     'C': pd.to_datetime('15.10.2017 12:00:00', format='%d.%m.%Y %H:%M:%S')} 

d2 = {k:v for k,v in d1.items() if v > input_date} 
print (d2) 
{'A': Timestamp('2017-12-06 12:00:00')} 

df['result'] = np.where(df.dict_key.isin(d2.keys()), df.id_2, df.id_1) 
print (df) 
    dict_key id_1 id_2 result 
0  A  1 10  10 
1  B  2 20  2 
2  A  3 30  30 
+0

作品。ありがとうございました :) – EyJay

2
In [20]: df['result'] = np.where(df.dict_key.map(dct) >= input_date, df['id_2'], df['id_1']) 

In [21]: df 
Out[21]: 
    dict_key id_1 id_2 result 
0  A  1 10  10 
1  B  2 20  2 
2  A  3 30  30 

dctあなたの質問にdictと呼ばれる辞書です。標準のキーワード(例:listdictなど)を上書きしないようにする必要があります。

+0

作品aswell、あなたは正しいです。この名前はコードスニペットのためにのみ使用しました。 – EyJay

関連する問題