1

これは例で示すのが一番だと思います。私がやろうとしているのは、グループから null 以外の番号を見つけて、それをグループの残りの部分に伝達することです。

In [52]: df = pd.DataFrame.from_dict({1:{'i_id': 2, 'i_num':1}, 2: {'i_id': 2, 'i_num': np.nan}, 3: {'i_id': 2, 'i_num': np.nan}, 4: {'i_id': 3, 'i_num': np.nan}, 5: {'i_id': 3, 'i_num': 5}}, orient='index')

In [53]: df
Out[53]:
   i_num  i_id
1      1     2
2    NaN     2
3    NaN     2
4    NaN     3
5      5     3

DataFrame は次のようになります。私が望むのは、すべての i_id == 2 を取り、それらの i_num == 1 を作成し、すべての i_id == 3 を作成し、それらの i_num == 5 を作成することです (したがって、両方とも非 null グループの隣人に一致します)。

したがって、最終結果は次のようになります。

   i_num  i_id
1      1     2
2      1     2
3      1     2
4      5     3
5      5     3
4

1 に答える 1

4

firstグループ内の最初の非 null 値を見つけます。次のように、各グループの他の値を入力できます。

df['i_num'] = df.groupby('i_id')['i_num'].transform('first')

これにより、必要に応じて列が生成されます。

   i_num  i_id
1      1     2
2      1     2
3      1     2
4      5     3
5      5     3

これにより、値だけでなく、グループ内のすべての値が最初の値に置き換えNaNられることに注意してください (これは、ここで探しているもののようです)。

または、グループ内の他の非 null 値を尊重するfillnaには、次の方法で使用できます。

# make a column of first values for each group
x = df['i_id'].map(df.groupby('i_id')['i_num'].first())
# fill only NaN values using new column x
df['i_num'] = df['i_num'].fillna(x)
于 2015-12-09T19:10:03.763 に答える