2017-07-25 18 views
0

私はこの質問のために簡略化された以下の構造のデータフレームを持っています。日付で行をグループ化し、NaN値を上書きする

A   B C D E 
0 2014/01/01 nan nan 0.2 nan 
1 2014/01/01 0.1 nan nan nan 
2 2014/01/01 nan 0.3 nan 0.7 
3 2014/01/02 nan 0.4 nan nan 
4 2014/01/02 0.5 nan 0.6 0.8 

ここで私が持っているのは、複数のタイムスタンプ間の一連の読み取り値です。列B、C、DおよびEは異なる位置を表す。私が読み込んでいるデータは、指定されたタイムスタンプで特定の場所からデータを取り、他の場所の値を入力するように設定されています。

私がしたいことは、.GroupBy()コマンドで簡単に行うことができるタイムスタンプでデータをグループ化することです。そこから、グループ化されたデータのナノ値に、後の行で取られた有効な値を上書きして、次の結果が得られるようにします。

A   B C D E 
0 2014/01/01 0.1 0.3 0.2 0.7 
1 2014/01/02 0.5 0.4 0.6 0.8 

これを達成するにはどうすればよいですか?

答えて

6

DataFrameGroupBy.aggdf.groupbyをお試しください:

In [528]: df.groupby('A', as_index=False, sort=False).agg(np.nansum) 
Out[528]: 
      A B C D E 
0 2014/01/01 0.1 0.3 0.2 0.7 
1 2014/01/02 0.5 0.4 0.6 0.8 

DataFrameGroupBy.sumと短いバージョン(感謝MaxU!):

In [537]: df.groupby('A', as_index=False, sort=False).sum() 
Out[537]: 
      A B C D E 
0 2014/01/01 0.1 0.3 0.2 0.7 
1 2014/01/02 0.5 0.4 0.6 0.8 
+2

なぜ 'np.nansum'が必要ですか? 'df.groupby( 'A'、as_index = False、sort = False).sum()' - トリックを行う必要があります... – MaxU

+1

@MaxU Brilliant。 sum()がナンを考慮に入れたかどうかは分かりませんでした。私はまだあなたのコメントを歓迎して学んでいます:) –

+1

優れた答え。 Pandas docsにリンクする:https://pandas.pydata.org/pandas-docs/stable/groupby.html#groupby-sorting –

1

あなたはpandasfirst

df.groupby('A', as_index=False).first() 


      A B C D E 
0 1/1/2014 0.1 0.3 0.2 0.7 
1 1/2/2014 0.5 0.4 0.6 0.8 
を使用してこれを試すことができます
+0

いいね! +1 –

+0

@cᴏʟᴅsᴘᴇᴇᴅ+1あなたも〜 – Wen

関連する問題