【问题标题】:Pandas/Python: Set value of new column based on row value and other DataFramePandas/Python:根据行值和其他 DataFrame 设置新列的值
【发布时间】:2020-07-23 07:02:21
【问题描述】:

当第二个数据框的省份名称与第一个数据框的省份名称匹配时,是否可以在列中添加一个值?我搜索了答案,但找不到任何对我的案例有用的东西。

这是第一个数据帧

    date        province            confirmed   released    deceased
0   2020-03-30  Daegu               6624        3837        111
1   2020-03-30  Gyeongsangbuk-do    1298        772         38
2   2020-03-30  Gyeonggi-do         463         160         5
3   2020-03-30  Seoul               426         92          0
4   2020-03-30  Chungcheongnam-do   127         83          0
...

这是第二个数据帧

    code    province            latitude    longitude
0   12000   Daegu               35.872150   128.601783   
1   60000   Gyeongsangbuk-do    36.576032   128.505599  
2   20000   Gyeonggi-do         37.275119   127.009466
3   10000   Seoul               37.566953   126.977977  
4   41000   Chungcheongnam-do   36.658976   126.673318
...

我想把第一个DataFrame变成这样。

    date        province            confirmed   released    deceased   latitude     longitude
0   2020-03-30  Daegu               6624        3837        111        35.872150    128.601783
1   2020-03-30  Gyeongsangbuk-do    1298        772         38         36.576032    128.505599
2   2020-03-30  Gyeonggi-do         463         160         5          37.275119    127.009466
3   2020-03-30  Seoul               426         92          0          37.566953    126.977977
4   2020-03-30  Chungcheongnam-do   127         83          0          36.658976    126.673318
...

谢谢!

【问题讨论】:

    标签: python pandas conditional-statements


    【解决方案1】:

    pandas.DataFrame.merge 方法是您要在此处使用的方法。

    使用您的示例 DataFrame:

    import pandas as pd
    
    df1 = pd.DataFrame(dict(
        date = [
            '2020-03-30','2020-03-30','2020-03-30',
            '2020-03-30','2020-03-30',],
        province = [
            'Daegu', 'Gyeongsangbuk-do', 'Gyeonggi-do', 
            'Seoul', 'Chungcheongnam-do'],
        confirmed = [6624, 1298, 463, 426, 127],
        released = [3837, 772, 160, 92, 83],
        deceased = [111, 38, 5, 0, 0],
    ))
    
    df2 = pd.DataFrame(dict(
        code = [12000, 60000, 20000, 10000, 41000],
        province = [
            'Daegu', 'Gyeongsangbuk-do', 'Gyeonggi-do', 
            'Seoul', 'Chungcheongnam-do'],
        latitude = [
            35.872150, 36.576032, 37.275119, 
            37.566953, 36.658976],
        longitude = [
            128.601783, 128.505599, 127.009466, 
            126.977977, 126.673318],
    ))
    
    df3 =  df1.merge(
        df2[['province', 'latitude','longitude']],
        on = 'province',
    )
    
    pd.set_option('display.max_columns', 7)
    
    print(df3)
    
    

    输出:

             date           province  confirmed  released  deceased   latitude  \
    0  2020-03-30              Daegu       6624      3837       111  35.872150   
    1  2020-03-30   Gyeongsangbuk-do       1298       772        38  36.576032   
    2  2020-03-30        Gyeonggi-do        463       160         5  37.275119   
    3  2020-03-30              Seoul        426        92         0  37.566953   
    4  2020-03-30  Chungcheongnam-do        127        83         0  36.658976   
    
        longitude  
    0  128.601783  
    1  128.505599  
    2  127.009466  
    3  126.977977  
    4  126.673318
    
    

    Example Code in python tutor

    【讨论】:

    • 感谢您的帮助!
    【解决方案2】:

    您真正想做的是基于province 列合并两个DataFrame。

    制作一个你想要的新数据框。

    首先在第一个 DataFrame 上运行一个循环并添加其中的所有值。 (保留不存在的列的值)

    然后在第二个 DataFrame 上运行一个循环,并通过将 province 的值与新 DataFrame 中已添加的值进行比较来添加其值。

    这是一个例子

    新数据帧

    date        province            confirmed   released    deceased   latitude     longitude
    

    添加第一个DataFrame后

        date        province            confirmed   released    deceased    latitude     longitude
    0   2020-03-30  Daegu               6624        3837        111
    1   2020-03-30  Gyeongsangbuk-do    1298        772         38
    2   2020-03-30  Gyeonggi-do         463         160         5
    3   2020-03-30  Seoul               426         92          0
    4   2020-03-30  Chungcheongnam-do   127         83          0
    

    添加第二个 DataFrame 后

        date        province            confirmed   released    deceased   latitude     longitude
    0   2020-03-30  Daegu               6624        3837        111        35.872150    128.601783
    1   2020-03-30  Gyeongsangbuk-do    1298        772         38         36.576032    128.505599
    2   2020-03-30  Gyeonggi-do         463         160         5          37.275119    127.009466
    3   2020-03-30  Seoul               426         92          0          37.566953    126.977977
    4   2020-03-30  Chungcheongnam-do   127         83          0          36.658976    126.673318
    

    【讨论】:

      猜你喜欢
      • 2022-09-27
      • 2020-11-04
      • 1970-01-01
      • 2019-08-02
      • 2019-12-27
      • 1970-01-01
      • 2020-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多