我找不到一种方法,可以使用从csv文件创建的其他数据框中的值来更改数据框中的一行。
如果名称匹配(例如England Premier),我想用数据框2中的行更改数据框1中的行。
如果仅在数据框1中存在一行,我希望它保持原样。
使用df2.update(df1),它将用DF 2中的行覆盖整个Dataframe 1,如果df2中不存在某些行,则将其删除。
import numpy as numpy
import pandas as pd
nov = 'd:\python\csv_master\lige.csv'
master = 'd:\python\csv_master\master.csv'
df1 = pd.read_csv(nov, dtype=str)
df2 = pd.read_csv(master, dtype=str)
df1.update(df2)
Dataframe 1
Unnamed: 0 Naziv Lige ID Lige Broj tabela Skraceninaziv Tabela tip Slaganje tip Posebno naznaci Sport Stampa Stil Insert pages Broj meceva
0 1 England Premier BO2_1 0 EN PL 3 1 0 F 1 2 0 10
1 2 England Championship BO2_326 0 EN CH 3 1 0 F 1 2 0 12
2 3 England League 1 BO2_327 0 EN L1 3 1 0 F 1 2 0 10
3 4 England League 2 BO2_328 0 EN L2 3 1 0 F 1 2 0 12
4 5 England National League BO2_329 0 EN NL 3 1 0 F 1 2 0 12
Dataframe 2
Unnamed: 0 Naziv Lige ID Lige Broj tabela Skraceninaziv Tabela tip Slaganje tip Posebno naznaci Sport Stampa Stil Insert pages Broj meceva
0 1 England Premier BO2_1 16 EN PL 5 3 0 F 1 2 0 10
1 2 England Championship BO2_326 8 EN CH 4 2 0 F 1 2 0 12
2 3 England League 1 BO2_327 4 EN L1 3 1 0 F 1 2 0 10
3 4 England League 2 BO2_328 4 EN L2 3 1 0 F 1 2 0 12
答案 0 :(得分:0)
根据您的问题,我假设您过滤的列的每一行都有唯一的值,并且没有歧义,您可以循环执行此操作:
for name in df2['c1'].unique():
mask1 = df1['c1'] == name
mask2 = df2['c1'] == name
df1.loc[mask1, :] = df2.loc[mask2, :]
因此,“ c1”是您要检查其条件的列,循环遍历df2中该列的所有唯一值,如果该值 匹配df1中的同一列,它将替换该行。
我不确定这是否是最好的方法,但是应该可以。如果需要匹配多个条件,只需将它们添加到掩码中即可。