IIUC你能做到這樣:
數據:
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
列索引:[0:6]
:
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不是應用賦值函數的原始df。 –