2017-12-02 20 views
1

パンダのデータフレームを再サンプリングし、異なる機能を異なる列に適用したい。問題は、文字列で列を正しく処理できないことです。文字列を " - "のような区切り文字とマージする関数を適用したいと思います。これはデータの例です。resample Pandasのデータフレームと列内の文字列をマージする

import pandas as pd 
import numpy as np 
idx = pd.date_range('2017-01-31', '2017-02-03') 
data=list([[1,10,"ok"],[2,20,"merge"],[3,30,"us"]]) 
dates=pd.DatetimeIndex(['2017-01-31','2017-02-03','2017-02-03']) 
d=pd.DataFrame(data, index=,columns=list('ABC')) 

      A B   C 
2017-01-31 1 10   ok 
2017-02-03 2 20  merge 
2017-02-03 3 30   us 

合計と平均アグリゲータを使用して数値列AとBを再サンプリングします。列Cしかし、和の作品の種類(しかし、それは何かが失敗することを意味するかもしれない2番目の場所に置かれます)。

d.resample('D').agg({'A': sum, 'B': np.mean, 'C': sum}) 

       A    C  B 
2017-01-31 1.0    a 10.0 
2017-02-01 NaN    0 NaN 
2017-02-02 NaN    0 NaN 
2017-02-03 5.0  merge us 25.0 

私はこれを取得したいと思います:

... 
2017-02-03 5.0  merge - us 25.0 

私はさまざまな方法ではなく(図示せず)が成功せず、ラムダを使用してみました。

2番目の関連する質問をすることができます:このために後処理を行うことはできますが、紛失したセルを別の列に0または ""で埋める方法はありますか?コラム'C'ため

+0

IIUCする必要があり、あなたは欠損値を埋めるために)(df.fillnaを使用することができます。 https://pandas.pydata.org/pandas-docs/stable/missing_data.html – Evan

+0

確かに、別の列に異なる置換(たとえば、0、なし、 "")を適用してください。私はそれを行うより豪華な方法があるかどうか疑問に思っていた。 – aless80

答えて

1

あなたのAGG機能がjoin

d.resample('D').agg({'A': sum, 'B': np.mean, 'C': ' - '.join}) 

       A  B   C 
2017-01-31 1.0 10.0   ok 
2017-02-01 NaN NaN    
2017-02-02 NaN NaN    
2017-02-03 5.0 25.0 merge - us 
+0

ああ、関数への "入力"はiterablesであり、私はiterablesを入力として取る関数を使うことができる。私は好きな操作をする必要がある場合、反復可能な関数を構築することができます。 奇妙なことに、私のコンソールでは、まだ2列目のC列が表示されています。 – aless80

関連する問題