如何将列的组合作为主键从另一个csv更新一个csv?

kmpatx3s  于 2023-06-19  发布在  其他
关注(0)|答案(1)|浏览(132)

我在我的任务中有一个块来构建一个python项目来完成以下任务。我很乐意寻求您的帮助,使其完整!我有2个相同标题的CSV,它们是:
[ID,Date,time,type,status,member,account,property,credit quantity, debitquantity, Net quantity, credit value, debit value, Net value, currency]
一个csv是input.csv,它包含一次运行的输入值,另一个csv是system.csv,它的作用就像一个数据库,包含每次运行后的所有求和值。必须根据input.csv更新system.csv。
更新systems.csv时,以下字段组合被视为主键:'Date', 'member', 'account', 'property'
如果在systems.csv中找到主键的值,则必须将贷项数量、借项数量、净数量、贷项价值、借项价值、净价值下的每个值添加到现有值中,如下所示:

    • input. csv**
ID,Date,time,type,status,member,account,property,credit quantity, debit quantity, Net quantity, credit value, debit value, Net value, currency
id01,2023.03.16,21:00:00,visa,active,xyz,acc001,cc,100, 0, 1000, 100, 0, 1000, usd
id02,2023.03.16,22:00:00,visa,active,abc,acc002,cc,0,200, 2000, 0, 200, 2000, usd
    • system. csv**
id101,2023.03.16,08:00:00,visa,active,xyz,acc001,cc,500, 0, 5000, 400, 0, 4000, usd
id102,2023.03.16,09:00:00,visa,active,abc,acc002,cc,0,600, 6000, 0, 200, 2000, usd
    • 运行后的system. csv**
id101,2023.03.16,21:00:00,visa,active,xyz,acc001,cc,600, 0, 6000, 500, 0, 5000, usd
id102,2023.03.16,22:00:00,visa,active,abc,acc002,cc,0,800, 8000, 0, 400, 4000, usd

目前,我已经采取了两个csv作为dataframes,并试图做的过程。但由于我缺乏知识,请帮助我完成这一点。先谢谢你了!!

brvekthn

brvekthn1#

IIUC,您可以用途:

df_in = pd.read_csv("input.csv")
df_sys = pd.read_csv("system.csv") #with optional `header=None, names=df_in.columns`

pkeys = ["Date", "member", "account", "property"]
scols = df_in.select_dtypes("object").columns.difference(pkeys)
ncols = df_in.columns.difference(scols.union(pkeys))

df_run = (
    pd.concat([df_in, df_sys])
        .groupby(pkeys,  as_index=False, sort=False).agg(
            {**{col: "sum" for col in ncols},
             **{col: "first" for col in scols}})
        [df_in.columns]
)

# df_run.to_csv("system.csv", index=False) #uncomment to overwrite the old `.csv`

输出(system.csv * 表格格式 *):
| ID|日期|时间|类型,类型|地位|成员|帐目|财产|信贷量|借方数量|净量|信用价值|借方价值|净值|通货|
| - -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|
| ID101| 2023.03.16| 21点|签证|活动的|xyz| ACC001| cc|六百|0|六千|五百|0|五千|美元|
| ID102| 2023.03.16 - 2023.03.16| 22点|签证|活动的|ABC| ACC002| cc| 0|八百|八千|0|四百|四千|美元|

相关问题