0

Pandas (0.9.1) を使用して物理コードを記述しています。私は2つのデータフレームを持っています:

レベル:

class 'pandas.core.frame.DataFrame'>
Int64Index: 37331 entries, 0 to 37330
Data columns:
atomic_number    37331  non-null values
ion_number       37331  non-null values
level_number     37331  non-null values
energy           37331  non-null values
g                37331  non-null values
metastable       37331  non-null values

行:

<class 'pandas.core.frame.DataFrame'>
Int64Index: 314338 entries, 0 to 314337
Data columns:
id                    314338  non-null values
wavelength            314338  non-null values
atomic_number         314338  non-null values
ion_number            314338  non-null values
f_ul                  314338  non-null values
f_lu                  314338  non-null values
level_number_lower    314338  non-null values
level_number_upper    314338  non-null values
dtypes: float64(3), int64(7)

やらなければならないことがいくつかあります: レベルを線 (atom、ion、level) で結合する必要があります: 最初に atom、ion、level_number_upper、次に atom、ion、level_number_lower です。結合を事前計算する方法はありますか - メモリは問題ではありませんが、速度は問題です。

また、レベル (原子、イオン) をグループ化し、レベルに対して操作を行う必要があります。私はこれをすでに(信じられないほど高速に)実行しましたが、結果のシリーズを行のデータフレームに結合するのに問題がありました。

どうすればいいですか?

乾杯ヴォルフガング

更新 v1:

参加したいものを表示するには、ここにコード スニペットをマージします

def calc_group_func(group):
    return np.sum(group['g']*np.exp(-group['energy'])
grouped_data = levels.group_by('atomic_number', 'ion_number')
grouped_data.apply(calc_group_func)

次に、グループ化されたデータをatomic_numberとion_numberの行で結合/マージしたい

4

1 に答える 1

2

より良い方法があるかもしれませんが、おそらく df.merge() がここで機能するでしょう。df.merge() は 2 つの DataFrame で動作するため、apply() の後に Series にある (atom、ion) ペアごとに計算された値は、最初に DataFrame に配置する必要があります。も指定する。

In [9]: grouped_vals = grouped_data.apply(calc_group_func)

In [10]: grouped_vals
Out[10]: 
atomic_number  ion_number
0              0             0.517541
               1             0.046833
1              0             0.253188
               1             0.440194

In [11]: lines.merge(pd.DataFrame({'group_val': grouped_vals}),
   ....:             left_on=['atomic_number', 'ion_number'],
   ....:             right_index=True)
Out[11]: 
    atomic_number  ion_number  group_val
id                                      
a               0           0   0.517541
b               0           0   0.517541
c               0           1   0.046833
d               0           1   0.046833
e               1           0   0.253188
f               1           0   0.253188
g               1           1   0.440194
h               1           1   0.440194
于 2012-12-16T03:21:12.300 に答える