簡體   English   中英

[熊貓]基於if語句分配新列的方法

[英][Pandas]The way to assign a new column based on if statement

我知道Assign可以幫助基於lambda函數創建/更改一列,如下所示:

df.assign(c = lambda x: x.sum())

但是,如果我想使語句內聯而不是在操作之外單獨進行處理,則無法找到使用if語句執行此操作的方法。

是否可以在不執行操作之外的任何其他操作的情況下實現此目的:

df.assign(c = lambda x: x.num_col.sum() if x.num_col > 0)

上面的命令返回“ SyntaxError :無效語法”

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

更新:從Pandas 0.20.1開始, 不建議使用.ix索引器,而建議使用更嚴格的.iloc和.loc索引器

語法無效,因為您使用的是三元條件,但僅使用前半部分。

三元條件允許您編寫如下if語句:

a = 1 if b > 0 else 0

在您的情況下,您可以編寫如下內容:

df = (
  df
  .assign(c = lambda x: x.num_col.sum() if x.num_col > 0 else 0)
)

請注意,最后添加else 0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM