Python 通过使用循环进行排序,将值从一个数据帧分配到另一个数据帧

Python 通过使用循环进行排序,将值从一个数据帧分配到另一个数据帧,python,pandas,loops,Python,Pandas,Loops,我有两个数据帧 df1 = pd.DataFrame.from_dict({'Qty': ['1', '2', '3', '4', '5', '6', '7'], 'Count': [2,1,5,5,6,1,1]}) print(df1) Qty Count 0 1 2 1 2 1 2 3 5 3 4 5 4 5 6 5 6 1 6 7 1 df2 = pd.DataFrame.from_

我有两个数据帧

df1 = pd.DataFrame.from_dict({'Qty': ['1', '2', '3', '4', '5', '6', '7'], 'Count': [2,1,5,5,6,1,1]})

print(df1)
  Qty  Count
0   1      2
1   2      1
2   3      5
3   4      5
4   5      6
5   6      1
6   7      1

df2 = pd.DataFrame.from_dict({'id': ['A', 'B', 'C', 'D', 'E', 'F', 'G'], 'Score': [10,9,8,7,6,5,4]})

print(df2)
  id  Score
0  A     10
1  B      9
2  C      8
3  D      7
4  E      6
5  F      5
6  G      4
我需要的是使用得分最高的id将df1的最高数量分配给df2,但该id只能分配3次

这就是我所期望的

df3 = pd.DataFrame.from_dict({'id': ['A', 'B', 'C', 'D', 'E', 'F', 'G'], 'Score': [10,9,8,7,6,5,4], 'Assigns': [[7,6,5],[5,5,5],[5,5,4],[4,4,4],[4,3,3],[3,3,3], [2,2,1] ]})

print(df3)
  id  Score    Assigns
0  A     10  [7, 6, 5]
1  B      9  [5, 5, 5]
2  C      8  [5, 5, 4]
3  D      7  [4, 4, 4]
4  E      6  [4, 3, 3]
5  F      5  [3, 3, 3]
6  G      4  [2, 1, 1]

有人知道怎么做吗?谢谢

试试这样的方法:

df2['Assigns'] = pd.Series(df1['Qty'].reindex(df1.index.repeat(df1['Count']))[::-1].to_numpy().reshape(-1,3).tolist())
df2
输出:

  id  Score    Assigns
0  A     10  [7, 6, 5]
1  B      9  [5, 5, 5]
2  C      8  [5, 5, 4]
3  D      7  [4, 4, 4]
4  E      6  [4, 3, 3]
5  F      5  [3, 3, 3]
6  G      4  [2, 1, 1]
详情:

  • df1.index.repeat(df1['Count'])
    ——重复数据帧的索引 行df1中的次数['count']
  • reindex
    基于 上一条语句的索引
  • 使用反向元素
    [:-1]
    从最后一个转到第一个
  • 然后使用
    pd.Series
    构造函数和 将其分配给dataframe列

试试这样的方法:

df2['Assigns'] = pd.Series(df1['Qty'].reindex(df1.index.repeat(df1['Count']))[::-1].to_numpy().reshape(-1,3).tolist())
df2
输出:

  id  Score    Assigns
0  A     10  [7, 6, 5]
1  B      9  [5, 5, 5]
2  C      8  [5, 5, 4]
3  D      7  [4, 4, 4]
4  E      6  [4, 3, 3]
5  F      5  [3, 3, 3]
6  G      4  [2, 1, 1]
详情:

  • df1.index.repeat(df1['Count'])
    ——重复数据帧的索引 行df1中的次数['count']
  • reindex
    基于 上一条语句的索引
  • 使用反向元素
    [:-1]
    从最后一个转到第一个
  • 然后使用
    pd.Series
    构造函数和 将其分配给dataframe列

你能再解释一下你是如何得到[7,6,5]然后得到[5,5,5]的吗?是的,当然@ScottBoston,我需要根据最佳分数将df1的计数分配给df2。例如,数量7在df1中是最大的,我想通过分数将其分配给df2中的最佳id,因此7将分配给id A,然后df1中第二大的是6,它只有一个,因此您将其分配给id A,然后您有6个5,您将一个分配给id A bc u只能分配3。。然后,你转到下一个ID你能再解释一下你是如何得到[7,6,5]然后得到[5,5,5]的吗?是的,当然@ScottBoston,我需要根据最佳分数将df1的计数分配给df2。例如,数量7在df1中是最大的,我想通过分数将其分配给df2中的最佳id,因此7将分配给id A,然后df1中第二大的是6,它只有一个,因此您将其分配给id A,然后您有6个5,您将一个分配给id A bc u只能分配3。。然后,你转到下一个ID。谢谢你的帮助!但是,如何向df2添加分配?如我在示例中所示,我需要的是id和分数,而不是数量和计数:(@M.Weithofer Oops.Easy fix.将df1更改为df2。只需将新系列分配给正确的数据帧。您期望的数据帧的最后一行是否不正确?您有一个2和两个1?谢谢,您是对的!您能向我解释该代码的功能吗?谢谢您的帮助!但是,我如何将分配添加到df2?如我在示例中所示,我需要id和分数,而不是数量和计数:(@M.Weithofer Oops.Easy fix。将df1更改为df2。只需将新系列分配到正确的数据帧。您期望的数据帧的最后一行是否不正确?您有一个2和两个1?谢谢您是对的!您能向我解释代码的作用吗?