Pandas数据框:根据另一列中的值操纵列(无需遍历行)

时间:2020-01-31 23:47:02

标签: python pandas

在没有循环/迭代行的情况下,我想操作一个数据框,以便根据一列(Transaction_Type)中的值将另一列(Gross_Value)中的值乘以-1或不乘以-1。

from subprocess import Popen
import os
f = os.path.join('temp', filename)
Popen(['localc', f])

对于所有销售积分,Gross_Value应该用负数表示:

Transaction_#  Transaction_Type  Gross_Value
 5542-6990      Invoice             39.00
 5981-3808      SalesCredit         89.00
 8058-9885      Invoice            199.00
 5420-6262      SalesCredit         99.00 

谢谢!

2 个答案:

答案 0 :(得分:1)

使用loc

m = (df['Transaction_Type'] == 'SalesCredit')
df.loc[m, 'Gross_Value'] *= -1

  Transaction_# Transaction_Type  Gross_Value
0     5542-6990          Invoice         39.0
1     5981-3808      SalesCredit        -89.0
2     8058-9885          Invoice        199.0
3     5420-6262      SalesCredit        -99.0

答案 1 :(得分:0)

尝试

CREATE OR REPLACE FUNCTION title_basics_partitioner() 
RETURNS TRIGGER AS $$ 
BEGIN  
    IF (startyear is null) THEN
        INSERT INTO startyear_null VALUES (NEW.*);
    ELSE IF (startyear >= '1874' AND startyear < '1894') THEN
        INSERT INTO startyear_1874_1894 VALUES (NEW.*);
    ELSE IF (startyear >= '1894' AND startyear < '1914') THEN
        INSERT INTO startyear_1894_1914 VALUES (NEW.*);
    ELSE IF (startyear >= '1914' AND startyear < '1934') THEN
        INSERT INTO startyear_1914_1934 VALUES (NEW.*);
    ELSE IF (startyear >= '1934' AND startyear < '1954') THEN
        INSERT INTO startyear_1934_1954 VALUES (NEW.*);
    ELSE IF (startyear >= '1954' AND startyear < '1974') THEN
        INSERT INTO startyear_1954_1974 VALUES (NEW.*);
    ELSE IF (startyear >= '1974' AND startyear < '1994') THEN
        INSERT INTO startyear_1974_1994 VALUES (NEW.*);
    ELSE IF (startyear >= '1994' AND startyear < '2014') THEN
        INSERT INTO startyear_1994_2014 VALUES (NEW.*);
    ELSE IF (startyear >= '2014' AND startyear < '2115') THEN
        INSERT INTO startyear_2014_2115 VALUES (NEW.*);
    ELSE         
        RAISE EXCEPTION 'Out of range year value. Fix the title_basics_insert_trigger() function!';
    END IF;     
    RETURN NULL; 
END;
$$ LANGUAGE plpgsql;