2017-08-25 13 views
1

パンダの新機能であり、本当にstackoverflow(本当に)には、どんな提案も高く評価されています!pandas dataframe:列の計算を実行する

私は、このデータフレームDFを持っている:

  col1  col2  col3 
Date           
2017-08-24 100  101  105 
2017-08-23 102  102  107 
2017-08-22 101  100  106 
2017-08-21 103  99  106 
2017-08-18 103  98  108 
... 

今私は、例えば、各列の値を持ついくつかの計算を実行したいのですが各値の対数を計算します。

私は、列をループし、結果の列で新しい一時データフレームを作成することをお勧めします。 この新しいデータフレームは、この例のようになります。

  col1  RN  LOG 
Date           
2017-08-24 100  1  2 
2017-08-23 102  2  2,008600 
2017-08-22 101  3  2,004321 
2017-08-21 103  4  2,012837 
2017-08-18 103  5  2,012837 

は、だから私は、forループにこれを試してみました:

for column in df: 
    tmp_df = df[column] 
    tmp_df['RN'] = range(1, len(tmp_df) + 1) # to create a new column with the row number 
    tmp_df['LOG'] = np.log(df[column]) # to create a new column with the LOG 

しかしこれはCOL1の隣に新しい列を印刷しますが、以下の1はありませんその他。結果は次のようになります。

tmp_df = tmp_df.assign(LN=np.log(df[column])) 

しかし、この:

Name: col1, Length: 86, dtype: object 
Date 
2017-08-24 00:00:00            100 
2017-08-23 00:00:00            102 
2017-08-22 00:00:00            101 
2017-08-21 00:00:00            103 
2017-08-18 00:00:00            103 
RN,"range(1, 86)" 
LOG,"Date 
2017-08-24 2 
2017-08-23 2,008600 
2017-08-22 2,004321 
2017-08-21 2,012837 
2017-08-18 2,012837 

午後12時00分00秒...最初の部分での日付に

を添加し、私はまた、割り当てで何かを試してみました"AttributeError:"という結果が返されます。 "Series"オブジェクトには属性 'assign'がありません。 "

誰かが正しい方向に向けると本当にうれしいです。 ありがとう!

+0

出力をどのように表示したいのですか?最後の結果が – johnchase

+0

であるはずです。こんにちはJohn、私は各列に新しいデータフォームを作成しようとしています。元の列c1 - cNとその隣に計算値が含まれている必要があります。行番号とc1のLOG。私はこれを2番目のコードの断片に表示しようとしました – RazzleDazzle

答えて

1

あなたのforループは良いアイデアですが、あなたは新しい列にパンダをこのようにシリーズを作成する必要があります。

for column in df: 
    df['RN ' + column] = pd.Series(range(1, len(df[column]) + 1)) 
    df['Log ' + column] = pd.Series(np.log(df[column])) 
0

は、今私はそれを考え出しました。 :)

import pandas as pd 
import numpy as np 
... 
for column in df: 
    tmp_res=pd.DataFrame(data=df[column]) 
    newcol=range(1, len(df) + 1) 
    tmp_res=tmp_res.assign(RN=newcol) 
    newcol2=np.log(df[column]) 
    tmp_res=tmp_res.assign(LN=newcol2) 

これはお互いの隣にすべての列を出力します。

  col1  RN  LOG 
Date           
2017-08-24 100  1  2 
2017-08-23 102  2  2.008600 
2017-08-22 101  3  2.004321 
2017-08-21 103  4  2.012837 
2017-08-18 103  5  2.012837 

今、私はそれらを処理しに行くか/ ExcelファイルをCSVでそれをすべてを置くことができます。 ご意見ありがとうございます!

関連する問題