前提
データ解析をしています。円形の等高線から場所ごとに線積分して場所ごとの線積分値をプロットして投影図を作りたいと考えています。自分はx軸とy軸を等分割して重複ありの組み合わせを作り出すことにより、円形等高線を形成するしきに代入した値をあとで合計すれば可能ではと考えプログラミングしています。しかし合計するという部分で詰まってしまいました。また併せてで同じ値を含んだ重複あり順列の作り方がわかりません。現在では同じ値同士の組み合わせを除外してしまっています。
実現したいこと
データフレーム内の1列目の値でグループ分けして、分けたグループごとで3列目の値の合計を出して、再度データフレームに格納したい。
発生している問題・エラーメッセージ
groupbyを試したところ値的には求めているものが得られたと思うのですが、本来100行×2列になると思うのですが、100行×1列で1列に二つの値が格納されてしまいました。
該当のソースコード
python
1import numpy as np 2import matplotlib.pyplot as plt 3from scipy.special import jv 4import pandas as pd 5import itertools 6 7fig = plt.figure() 8ax1 = fig.add_subplot(111) 9x = np.linspace(0, 4*2^(1+0), 40) #等間隔で値を0~4まで20個作成 lの値はここで変える 10y = np.linspace(0, 2*np.pi, 40) #等間隔で値を0~360まで20個作成 11x, y = np.meshgrid(x, y) #x,yからメッシュグリッドを作成 12def fz(x,y): #高さデータzを作る関数fz定義 13 return jv(0,x)*np.cos(0*y) #ここで基底関数決める→jv(m,r)*cos or sin(mθ) 14z = fz(x,y) 15 16x1 = x*np.cos(y) 17y1= x*np.sin(y) 18 19ax = plt.contour(x1,y1,z,colors='black') #等高線表示 20ax.clabel(fmt='%1.1f', fontsize=16) #等高線の値を表示 21ax = plt.contourf(x1,y1,z,cmap='rainbow') #等高線レベルに応じて色を塗る 22ax = plt.colorbar(label="contour level") #カラーバー表示 23 24 25plt.show() 26 27#x=rcosθ 28#y=rsinθ 29 30start = -8 31stop = 8 #半径を入れる 32num =100 #分割数 33lst = np.linspace(start, stop, num) 34perm = itertools.permutations(lst,2) 35df = pd.DataFrame(perm) 36df.columns=['x','y'] 37x_prj = df["x"] 38y_prj = df["y"] 39df["z"] = jv(0,np.sqrt(np.square(x_prj)+np.square(y_prj)))*np.cos(0*np.arctan(y_prj/x_prj)) 40z_prj = df["z"] 41lst 42df 43 44df_gr = df.groupby('x').agg({'z': np.sum}) 45print(df_gr)
試したこと
最初はfor文で最小値から足し合わせようと考えましたが、数が合わなくなることに気づきましたのでgroupbyを利用しました。おそらく値的にはあっています。あとは1列に二つ格納されてカラムのzがどこかに行ってしまっています。以下の状態です。私のzはいったいどうしてこんなところに逃げ出してしまったのでしょうか?
z
x
-8.000000 -5.123848
-7.838384 -2.824273
-7.676768 -0.502862
-7.515152 1.781209
-7.353535 3.970557
... ...
7.353535 3.970557
7.515152 1.781209
7.676768 -0.502862
7.838384 -2.824273
8.000000 -5.123848
[100 rows x 1 columns]
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件