2017-01-19 5 views
-2

私は、社会的テストに参加した回答者の数値サブジェクトIDをインデックスとするパンダデータフレームを持っています。パンダの単一インデックスの名前を変更

基本的に、質問は2倍です。

a)。 Pandas DataFrameで単一重複インデックスの名前を変更するにはどうすればよいですか?

データの部分が、この(最初の列インデックスである)のようになります。例えば

subject build gender_response 
7 5.0.6.0 Female 
5 5.0.6.0 Male 
4 5.0.6.0 Male 
3 5.0.6.0 Female 
3 5.0.6.0 Female 
1 5.0.6.0 Male 

、私は、他の整数に指数(「3」)のいずれかをリセットする必要があります。

私はパンダのドキュメントからの主要な機能を試してみました - 私はTrueにパラメータ「インプレース」を設定している場合、しかしhttp://pandas.pydata.org/pandas-docs/stable/generated/pandas.Index.rename.htmlを、何も起こりません:

master.iloc[3].rename(120, inplace=True) 

私は新しい変数を作成し、このパラメータなしで同じ表現を使用している場合新しいインデックスを持つPandas.Seriesを返す:(しかし、私はそれを新しいデータフレームに適用する必要がある。

b)。他の列の値を条件付きで変更する方法

subject time Gender Age 
7 12:30:10 Female 23 
5 12:23:10 Male 18 
4 12:22:17 Male 36 
3 12:16:55 Female 45 
3 12:16:16 Female 67 
1 12:05:22 Male 28 

たとえば、私はテストが行​​われた列「時間」を持っています。私はパンダが関数を適用してそれをやろうとしました:

time_point = pd.Timestamp(1/19/2017 12:16:55) 
def filter_by_time(x): 
    if x[time] == Timestamp: 
    x.index.rename(120) 

これをデータフレームの行に適用しました。

思考?クエリ1の場合

+0

ただ、気づいた間違いを試してみてください。 –

+0

time_point = pd.Timestamp(2017年1月18日12時16分55秒) デフfilter_by_time(X): Xの場合、[時間] == time_point: x.index.rename(120) –

+0

あなたはあなたの質問を編集してください間違いを修正する – IanS

答えて

1


あなたはこのmaster.index.values[3] = 120代わりmaster.iloc[3].rename(120, inplace=True)を試すことができますbasis.Soインデックス位置にインデックスの名前を変更しています。クエリ2については

コードの最後のブロックにこの

def filter_by_time(x): 
    if x.name == "time": 
     for index, value in enumerate(x): 
      if value == pd.Timestamp("1/19/2017 12:16:55").strftime("%H:%M:%S"): 
       master.index.values[index] = 120 
master.apply(filter_by_time) 
+0

ありがとうございました!両方のソリューションが完全に機能する –

関連する問題