2016-04-24 4 views
0
import re 
#Creating several new colums with a for loop and adding them to the original df. 
#Creating permutations for a second level of binary variables for df 
for i in list_ib: 
    for j in list_ib: 
     if i == j: 
      break 
     else:    
      bina = df[i]*df[j] 
      print(i,j) 

iはデータフレーム(df)に属し、jは同じ列です。 私は各列の乗算を計算しました。私の質問は今、元のdfに新しいバイナリ製品の列をすべて追加するにはどうすればいいですか?Pythonのforループによって計算されたデータフレームに列を追加する

私が試してみました:

df = df + df[i,j,bina] 
を私は私が必要な結果を得ていないのです。助言がありますか?

答えて

0

私が理解しているように、i,j,binaはあなたのdfの一部ではありません。これらの「行」を表す各配列要素のそれぞれについての配列を構築し、i,j,bina準備のためにすべての行を取得したら、あなたは、このように連結することができる:あるいは

>>> new_df = pd.DataFrame(data={'i':i, 'j':j, 'bina':bina}, columns=['i','j','bina']) 
>>> pd.concat([df, new_df], axis=1) 

、収集した'i', 'j' and 'bina'のすべてのデータを取得したらあなたが別の配列内のこれらのそれぞれのデータを持っていると仮定すると、あなたはこれを行うことができます。これらの3つの配列は、データフレームDFの行のように多くの要素を持っている場合にのみ動作します

>>> df['i'] = i 
>>> df['j'] = j 
>>> df['bina'] = bina 

こちらがお役に立てば幸いです。

+0

あなたの後ろには何が見つかりましたか? – Thanos

0

通常、[]でアクセスできる内蔵__setitem__()を使用してDataframeに列を追加します。例:

import pandas as pd 

df = pd.DataFrame() 

df["one"] = 1, 1, 1 
df["two"] = 2, 2, 2 
df["three"] = 3, 3, 3 

print df 

# Output: 
# one two three 
# 0 1 2  3 
# 1 1 2  3 
# 2 1 2  3 

list_ib = df.columns.values 

for i in list_ib: 
    for j in list_ib: 
     if i == j: 
      break 
     else: 
      bina = df[i] * df[j] 
      df['bina_' + str(i) + '_' + str(j)] = bina # Add new column which is the result of multiplying columns i and j together 

print df 

# Output: 
#  one two three bina_two_one bina_three_one bina_three_two 
# 0 1 2  3    2    3    6 
# 1 1 2  3    2    3    6 
# 2 1 2  3    2    3    6 
関連する問題