1

私は初心者のプログラマーであり、初心者の python/pandas ユーザーです。私は行動科学者であり、パンダを使用してデータを処理および整理することを学んでいます。その結果、これらのいくつかは完全に明白に見えるかもしれませんし、フォーラムに値しない質問のように思えるかもしれません. 寛容さを持ってください!私にとって、これは何日にもわたる作業であり、この質問に対する答えをすでに見つけようと何時間も費やしてきました。助けてくれてありがとう。

私のデータは次のようになります。「実際の」Actor および Recipient データは常に 5 桁の数字であり、「Behavior」データは常に文字コードです。私の問題は、俳優列の「日付」や「s」などのマーカーで示される特別な行にもこの形式を使用していることです。これらのマーカーは、「Behavior」列がこの特殊なタイプのデータを保持しており、実際の動作データを保持していないことを示しています。そこで、Actor 列のマーカーを NaN 値に置き換え、Behavior 列から特別なデータを取得して別の列 (この例では、空の Activity 列) に入れたいと考えています。

    follow    Activity    Actor    Behavior    Recipient1
0   1         NaN         date     2.1.3.2012  NaN
1   1         NaN         s        ss.hx       NaN
2   1         NaN         50505    vo          51608
3   1         NaN         51608    vr          50505
4   1         NaN         s        ss.he       NaN

これまでのところ、パンダで「s」行を選択して新しいデータフレームに入れるコードをいくつか書きました。

def get_act_line(group):
    return group.ix[(group.Actor == 's')]

result = trimdata.groupby('follow').apply(get_act_line)

このデータフレームの Behavior 列を Activity 列にコピーし、Actor と Behavior の値を NaN に置き換えました。

result.Activity = result.Behavior
result.Behavior = np.nan
result.Actor = np.nan
result.head()

したがって、私の新しいデータフレームは次のようになります。

follow         follow    Activity    Actor    Behavior    Recipient1
1        2     1         ss.hx       NaN      NaN         NaN
         34    1         hf.xa       NaN      NaN         f.53702
         74    1         hf.fe       NaN      NaN         NaN
10       1287  10        ss.hf       NaN      NaN         db
         1335  10        fe          NaN      NaN         db

ここでやりたいことは、このデータフレームを元のデータフレームと組み合わせて、選択した行のすべての値を置き換えますが、元のデータフレームの他の行の値を維持することです。

これは明白な解決策がある単純な質問のように思えるかもしれません。

Wes McKinney の本を読み、さまざまな種類のマージ、マッピング、結合、変換、連結などに関するドキュメントを読みました。フォーラムを閲覧しましたが、これを理解するのに役立つ回答が見つかりませんでした。あなたの助けは非常に高く評価されます。

4

1 に答える 1

2

これを行う 1 つの方法 (より最適でエレガントな方法があるかもしれませんが) は次のとおりです。

mask = (df['Actor']=='s')
df['Activity'] = df[mask]['Behavior']
df.ix[mask, 'Behavior'] = np.nan 

ここで、df は結果データフレームに相当します。これは返されるはずです(私の列の順序は少し異なります):

  Activity  Actor             Behavior  Recipient1  follow
0      NaN   date  2013-04-01 00:00:00          NaN       1
1    ss.hx    NaN                ss.hx          NaN       1
2      NaN  50505                   vo        51608       1
3      NaN  51608                   vr        50505       1
4    ss.he    NaN                ss.hx          NaN       1

参考文献:

  • 他の STO 投稿からのdf.ixの説明。
于 2013-09-24T00:32:01.040 に答える