IIUCあなたは、このようにそれを行うことができます。
データ:[0:6]
:
In [6]: df = pd.DataFrame(np.random.randn(10,2),columns=list('ab'))
In [7]: df
Out[7]:
a b
0 0.493970 1.095644
1 0.128510 -0.542144
2 0.136247 -0.544499
3 -0.540835 -0.100574
4 0.052725 -0.164856
5 -1.201619 1.578153
6 1.921872 0.505875
7 -2.519725 0.282050
8 -1.581868 -0.240352
9 -0.071207 -1.366953
In [8]: df.iloc[:6]
Out[8]:
a b
0 0.493970 1.095644
1 0.128510 -0.542144
2 0.136247 -0.544499
3 -0.540835 -0.100574
4 0.052725 -0.164856
5 -1.201619 1.578153
6 1.921872 0.505875
は、インデックスのa
列に正の値の合計を見つけてみましょう
In [9]: df.iloc[:6].query('a > 0').a.sum()
Out[9]: 2.733322288547374
解決策:
列の名前が変更された
In [10]: df.iloc[:6].assign(c=lambda x: x.query('a > 0').a.sum())
Out[10]:
a b c
0 0.493970 1.095644 2.733322
1 0.128510 -0.542144 2.733322
2 0.136247 -0.544499 2.733322
3 -0.540835 -0.100574 2.733322
4 0.052725 -0.164856 2.733322
5 -1.201619 1.578153 2.733322
6 1.921872 0.505875 2.733322
同じ:
In [11]: df.iloc[:6].rename(columns={'a':'AAA', 'b':'BBB'}).assign(c=lambda x: x.query('AAA > 0').AAA.sum())
Out[11]:
AAA BBB c
0 0.493970 1.095644 2.733322
1 0.128510 -0.542144 2.733322
2 0.136247 -0.544499 2.733322
3 -0.540835 -0.100574 2.733322
4 0.052725 -0.164856 2.733322
5 -1.201619 1.578153 2.733322
6 1.921872 0.505875 2.733322
UPDATE
:はパンダ0.20.1
the .ix indexer is deprecated, in favor of the more strict .iloc and .loc indexersから始まります。
ありがとうございますが、dfはすでに数多くの操作を含んでいますが、これはまだ操作を分離する必要があります。 –
@青田ゆん、私はそれを取得していない - あなたはどういう意味ですか?あなたは新しい__virtual__カラム( 'assign'メソッドを使って)または__permanent__カラムを必要としますか? – MaxU
df.ix []。rename()... assign()などの代入を行う前に、dfの背後にある多くの操作を実行したいので、仮想の代入となります。したがって、dfはassign関数を適用する元のdfではありません。 –