簡體   English   中英

我應該如何減去兩個數據幀和Pandas並顯示所需的輸出?

[英]How should I subtract two dataframes and in Pandas and diplay the required output?

我的桌子看起來像這樣:

In [82]:df.head()
Out[82]:
            MatDoc  MatYr  MvT  Material  Plnt  SLoc       Batch  Customer  AmountLC  Amount ...  PO  MatYr.1  MatDoc.1  Order   ProfitCtr    SLED/BBD   PstngDate   EntryDate      Time  Username
    0   4912693062   2015  551    100062  HDC2  0001  5G30MC1A11       NaN      9.03    9.06 ... NaN      NaN       NaN    NaN  IN1165B085  26.01.2016  01.08.2015  01.08.2015  01:13:16    O33462
    1   4912693063   2015  501       166  HDC2  0004         NaN       NaN      0.00    0.00 ... NaN      NaN       NaN    NaN  IN1165B085         NaN  01.08.2015  01.08.2015  01:13:17    O33462
    2   4912693320   2015  551    101343  HDC2  0001  5G28MC1A11       NaN     53.73   53.72 ... NaN      NaN       NaN    NaN  IN1165B085  25.01.2016  01.08.2015  01.08.2015  01:16:30    O33462

在這里,我需要對Order列上的數據進行分組並僅對AmountLC列求和。 AmountLC需要檢查Order列的值,以便它同時出現在MvT101groupMvT102group 如果一個Order在這兩組數據匹配,那么我需要減去MvT102groupMvT101group 和顯示

Order|Plnt|Material|Batch|Sum101=SumofMvt101ofAmountLC|Sum102=SumofMvt102ofAmountLC|(Sum101-Sum102)/100

我首先要做的是制作僅包含101和102的新df: Mvt101MvT102

MvT101 = df.loc[df['MvT'] == 101]

MvT102 = df.loc[df['MvT'] == 102]

然后我按Order將其分組,並獲得列的總和值

MvT101group = MvT101.groupby('Order', sort=True)

In [76]:
MvT101group[['AmountLC']].sum()
Out[76]:
Order          AmountLC
1127828     16348566.88
1127829     22237710.38
1127830     29803745.65
1127831     30621381.06
1127832     33926352.51

MvT102group = MvT102.groupby('Order', sort=True)

In [77]:
MvT102group[['AmountLC']].sum()
Out[77]:
Order         AmountLC
1127830       53221.70
1127831      651475.13
1127834       67442.16
1127835     2477494.17
1128622      218743.14

此后,我無法理解如何編寫查詢。 如果需要,請詢問我更多詳細信息。這是我工作的CSV文件鏈接

希望我正確理解了這個問題。 將兩組分組后,您可以:

MvT101group = MvT101.groupby('Order',sort=True).sum()
MvT102group = MvT102.groupby('Order',sort=True).sum()

您可以更新兩個組的列名:

MvT101group.columns = MvT101group.columns.map(lambda x: str(x) + '_101')
MvT102group.columns = MvT102group.columns.map(lambda x: str(x) + '_102')

然后合並所有3個表,以便在主表中具有所有3列:

df = df.merge(MvT101group, left_on=['Order'], right_index=True, how='left')
df = df.merge(MvT102group, left_on=['Order'], right_index=True, how='left')

然后可以添加計算列:

df['calc'] = (df['Order_101']-df['Order_102']) / 100

暫無
暫無

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

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