如何使用熊猫的其他数据框中的值更改数据框中的行

时间:2019-09-07 18:09:33

标签: python-3.x pandas dataframe

我找不到一种方法,可以使用从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

1 个答案:

答案 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中的同一列,它将替换该行。

我不确定这是否是最好的方法,但是应该可以。如果需要匹配多个条件,只需将它们添加到掩码中即可。