代码之家  ›  专栏  ›  技术社区  ›  user1574881

如何循环使用Pandas数据帧中的值?

  •  0
  • user1574881  · 技术社区  · 2 年前

    当更新第二个数据帧中的某些行时,在一个数据帧内循环和重复名称的最快方法是什么?谢谢你的帮助。我在这件事上花了很多天,但一无所获。

    具有规则4,5,6,10,11,12的行应在名称数据框中循环并重复名称。

    这是我想要更改的数据帧:

    规则 名称
    12
    9
    7.
    1.
    3.
    2.
    4.
    6.
    9
    4.
    1.
    4.
    5.
    2.
    11
    6.
    9
    2.
    10
    3.
    10
    3.
    1.
    4.
    4.
    3.
    7.
    7.
    12

    这是我努力实现的结果:

    规则 名称
    12 亚当斯
    9
    7.
    1.
    3.
    2.
    4. 面包师
    6. 克拉克
    9
    4. 戴维斯
    1.
    4. 亚当斯
    5. 面包师
    2.
    11 克拉克
    6. 戴维斯
    9
    2.
    10 亚当斯
    3.
    10 面包师
    3.
    1.
    4. 克拉克
    4. 戴维斯
    3.
    7.
    7.
    12 亚当斯

    名称数据帧

    名称
    亚当斯
    面包师
    克拉克
    戴维斯

    我尝试了numpy矢量化,但对于我想要更改的所有条目,只得到了一个名称。

    2 回复  |  直到 2 年前
        1
  •  1
  •   Ynjxsjmh    2 年前

    IIUC,你可以

    1. 检查的每个元素 df1 Rule isin 您的规则列表。
    2. 然后循环并重复的名称 df2 Name 列,具体取决于所包含规则的长度。
    3. 最后有条件地将重复名称分配给 数据流1 规则
    lst = [4,5,6,10,11,12]
    m = df1['Rule'].isin(lst)
    df1.loc[m, 'Name'] = (df2['Name'].tolist() * (m.sum()//len(df2['Name']) + 1))[:m.sum()]
    
    print(df1)
    
        Rule   Name
    0     12  Adams
    1      9    Nan
    2      7    Nan
    3      1    Nan
    4      3    Nan
    5      2    Nan
    6      4  Baker
    7      6  Clark
    8      9    Nan
    9      4  Davis
    10     1    Nan
    11     4  Adams
    12     5  Baker
    13     2    Nan
    14    11  Clark
    15     6  Davis
    16     9    Nan
    17     2    Nan
    18    10  Adams
    19     3    Nan
    20    10  Baker
    21     3    Nan
    22     1    Nan
    23     4  Clark
    24     4  Davis
    25     3    Nan
    26     7    Nan
    27     7    Nan
    28    12  Adams
    
        2
  •  0
  •   rhug123    2 年前

    一种选择是使用模

    l = [4,5,6,10,11,12]
    m = df['Rule'].isin(l)
    
    m.cumsum().sub(1).mod(len(df2['Name'])).map(dict(enumerate(df2['Name']))).where(m)
    

    输出:

    0     Adams
    1       NaN
    2       NaN
    3       NaN
    4       NaN
    5       NaN
    6     Baker
    7     Clark
    8       NaN
    9     Davis
    10      NaN
    11    Adams
    12    Baker
    13      NaN
    14    Clark
    15    Davis
    16      NaN
    17      NaN
    18    Adams
    19      NaN
    20    Baker
    21      NaN
    22      NaN
    23    Clark
    24    Davis
    ...
    25      NaN
    26      NaN
    27      NaN
    28    Adams