2017-10-10 3 views
1

これらの2つの機能は私と同じようです。列cと列dが等しいので、下のコードで同じ目標を達成していることがわかります。だから、私はいつ別のものを使うべきですか?ここでcombine_firstとfillnaの違いは何ですか?

は一例です:

import pandas as pd 
import numpy as np 

df = pd.DataFrame(np.random.randint(0, 10, size=(10, 2)), columns=list('ab')) 
df.loc[::2, 'a'] = np.nan 

戻り値:

 a b 
0 NaN 4 
1 2.0 6 
2 NaN 8 
3 0.0 4 
4 NaN 4 
5 0.0 8 
6 NaN 7 
7 2.0 2 
8 NaN 9 
9 7.0 2 

これは私の出発点です。今、私は2つの列、combine_firstを使用して1とfillnaを使用して1を追加します、そして、彼らは同じ結果を生成します:Combine Pandas data frame column values into new column

:データセットのためにこの質問に

 a b c d 
0 NaN 4 4.0 4.0 
1 8.0 7 8.0 8.0 
2 NaN 2 2.0 2.0 
3 3.0 0 3.0 3.0 
4 NaN 0 0.0 0.0 
5 2.0 4 2.0 2.0 
6 NaN 0 0.0 0.0 
7 2.0 6 2.0 2.0 
8 NaN 4 4.0 4.0 
9 4.0 6 4.0 4.0 

クレジット:

df['c'] = df.a.combine_first(df.b) 
df['d'] = df['a'].fillna(df['b']) 

戻り値を

+1

私はパンダにはあまりよく慣れていませんが、[fillna](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.fillna.html) [combine_first](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.combine_first.html)は1対1の取引です – Wondercricket

答えて

5

combine_firstは、重複しないインデックスが存在する場合に使用することを意図しています。これは、ヌルを効果的に埋めるだけでなく、最初に存在しなかったインデックスや列の値を提供します。

dfa = pd.DataFrame([[1, 2, 3], [4, np.nan, 5]], ['a', 'b'], ['w', 'x', 'y']) 
dfb = pd.DataFrame([[1, 2, 3], [3, 4, 5]], ['b', 'c'], ['x', 'y', 'z']) 

dfa.combine_first(dfb) 

    w x y z 
a 1.0 2.0 3.0 NaN 
b 4.0 1.0 5.0 3.0 # 1.0 filled from `dfb`; 5.0 was in `dfa`; 3.0 new column 
c NaN 3.0 4.0 5.0 # whole new index 

我々fillna

dfa.fillna(dfb) 

    w x y 
a 1 2.0 3 
b 4 1.0 5 # 1.0 filled in from `dfb` 

お知らせdfbからの新しい列またはインデックスが含まれていない場合は、すべてのインデックスと列が今の結果に

に含まれていることに注意してください。 dfaはインデックスとカラムの情報を共有しています。あなたのケースでは


、あなたは同じインデックスに1列にfillnacombine_firstを使用しています。これらは事実上同じことになります。

関連する問題