我有两个数据帧
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
我需要的是将df1的最高数量分配给使用得分最高的id的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
构造器构建一个新的pandas系列