簡體   English   中英

根據 DataFrame 中的過濾條件將正值轉換為負值

[英]Convert positive values based on a filter condition in a DataFrame to negative values

user_id           date         type        transaction_part_sum     transaction_part_count
1000616411022604  2011-12-20   debit                51.58                       1
1000616411022604  2013-06-10   debit                25.52                       1
1000616411022604  2013-11-07   credit               533.29                      1
1000616411022604  2013-12-26   debit                3.82                        1
1000616411022604  2013-12-31   credit               259.68                      1
1000616411022604  2014-01-02   debit                79.10                       1
1000616411022604  2014-02-25   debit                9.99                        1
1000616411022604  2014-03-26   debit                3.42                        1
1000616411022604  2014-04-02   debit                71.90                       1

在如上所示的 Pandas DataFrame 中,我想將“transaction_part_sum”的借方行更改為負值。

我做了這個

grouped.loc[grouped['type'] == 'debit', 'transaction_part_sum'] = -1 * grouped['transaction_part_sum']

但是在打印分組時。 借方行中的值不會被填充。 如果我乘以任何其他正數,我會得到填充的值。 如何將借方行更改為負值?

output: 
user_id           date         type         transaction_part_sum      transaction_part_count
1000616411022604  2011-12-20   debit                                            1
1000616411022604  2013-06-10   debit                                            1
1000616411022604  2013-11-07   credit               533.29                      1
1000616411022604  2013-12-26   debit                                            1
1000616411022604  2013-12-31   credit               259.68                      1
1000616411022604  2014-01-02   debit                                            1
1000616411022604  2014-02-25   debit                                            1
1000616411022604  2014-03-26   debit                                            1
1000616411022604  2014-04-02   debit                                            1

您為我工作的解決方案,也應該通過*=語句通過常量簡化為多個:

編輯:列amount對象有dtype ,這顯然是字符串,所以首先需要轉換為數字:

dataframe = pd.DataFrame(dataList, columns=['user_id', 'account_id','amount','randString','date','type','string'])
dataframe['amount'] = dataframe['amount'].astype(float)

grouped = dataframe.groupby(['user_id','date','type']).agg({'amount':['sum','count']}).sort_values(by='date')
grouped.loc[grouped['type'] == 'debit', 'transaction_part_sum'] *= -1
print (grouped)
            user_id        date    type  transaction_part_sum  \
0  1000616411022604  2011-12-20   debit                -51.58   
1  1000616411022604  2013-06-10   debit                -25.52   
2  1000616411022604  2013-11-07  credit                533.29   
3  1000616411022604  2013-12-26   debit                 -3.82   
4  1000616411022604  2013-12-31  credit                259.68   
5  1000616411022604  2014-01-02   debit                -79.10   
6  1000616411022604  2014-02-25   debit                 -9.99   
7  1000616411022604  2014-03-26   debit                 -3.42   
8  1000616411022604  2014-04-02   debit                -71.90   

   transaction_part_count  
0                       1  
1                       1  
2                       1  
3                       1  
4                       1  
5                       1  
6                       1  
7                       1  
8                       1  

您可以執行一個簡單的命令將其乘以 -1。

import pandas as pd
df = pd.DataFrame({'trans':[10,20,30,40]})
print (df)
df['trans'] *= -1
print (df)

這將打印如下結果:

   trans
0     10
1     20
2     30
3     40
   trans
0    -10
1    -20
2    -30
3    -40

即使對於條件,您也可以這樣做。

df.loc[df['trans'] == 20,'trans'] *= -1
print (df)

這將導致 -20,但所有其他人都按原樣說。

   trans
0     10
1    -20
2     30
3     40

你可以試試 numpy.where

grouped['transaction_part_sum'] = np.where(grouped.type == 'debit', -1 * grouped.transaction_part_sum, grouped.transaction_part_sum)

暫無
暫無

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

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