如何基于另外两列的值在数据帧中创建列?

2024-05-23 17:14:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为纳税申报预先格式化一些数据,我正在使用python自动化一些excel工作。我有一个包含三列的数据框:Account;对方账户;数量我只有对方账户的名称和值,但同一对账户的值-对方账户应该完全相同。例如:

Account       Opposite Acc.      Amount

              Cash               -240.56
              Supplies            240.56
              Dentist            -10.45
              Gum                 10.45

从这一点,我可以推断,现金与用品相反,牙医与口香糖相反,因此我希望我的产出是:

Account      Opposite Acc.      Amount

Supplies      Cash               -240.56
Cash          Supplies            240.56
Gum           Dentist            -10.45
Dentist       Gum                 10.45

现在,我使用str.contains手动执行此操作

df = df.assign(en_accounts = df['Opposite Acc.'])
df['Account'] = df['Account'].fillna("0")
df.loc[df['Account'].str.contains('Cash'), 'Account'] = 'Supplies' 

但是有很多变量,我想知道是否有一种方法可以在python中自动化这个过程。一种策略可能是:如果两行相加为0,则帐户是匹配的-->;因此,当项目A(如供应品)发生在“对方账户”中时,项目B(如现金)放在同一行,但放在“账户”中

这就是我到目前为止所做的:

df['Amount'] = np.abs(df["Amount"])
c1 = df['Amount']
c2 = df['Opposing Acc.']

for i in range(1,len(c1)-1):
    p = c1[i-1]
    x = c1[i]
    n = c1[i+1]

    if p == x:
         for i in range(1,len(c2)-1):
                a = c2[i-1]
                df.loc[df['en_account']] = a

但是我得到了以下错误:“[Index[..]\n dtype='object',length=28554]中没有一个在[Index]中。”


Tags: 数据df账户accountcashamountaccc2