gpt4 book ai didi

python使用排名号来选择两个数据帧之间的值

转载 作者:行者123 更新时间:2023-12-01 01:37:08 24 4
gpt4 key购买 nike

我有两个数据框,如下所示。我想在数据帧 df2 中添加一列。使用 df2['date']df2['ranking'] 数字选择数据帧 df 中的值,例如在 df2 中 第 0 行日期为 20130101,排名为 3,选择第 0 行数据帧 df 中的第三大数字(它们具有相同的日期)并返回 0.24。如何实现我添加为最后一个的最后一个数据帧输出?

import pandas as pd
import numpy as np
df = pd.DataFrame({
'date': [20130101,20130102, 20130103, 20130104, 20130105, 20130106],
'part1':[-0.17,-1.03,1.59,-0.05,-0.1,0.9],
'part2':[0.67,-0.03,1.95,-3.25,-0.3,0.6],
'part3':[0.7,-3,1.5,-0.25,-0.37,0.62],
'part4':[0.24,-0.44,1.335,-0.45,-0.57,0.92]
})
df2 = pd.DataFrame({
'date': [20130101,20130102, 20130103, 20130104, 20130105, 20130106],
'ranking': [3, 4, 1, 4, 2, 3]
})
date output ranking
0 20130101 0.24 3
1 20130102 -3.00 4
2 20130103 1.95 1
3 20130104 -3.25 4
4 20130105 -0.30 2
5 20130106 0.62 3

最佳答案

用途:

print (df)
date part1 part2 part3 part4
0 20130101 -0.17 0.67 0.70 0.240
1 20130102 -1.03 -0.03 -3.00 -0.440
2 20130103 1.59 1.95 1.50 1.335
3 20130104 -0.05 -3.25 -0.25 -0.450
4 20130105 -0.10 -0.30 -0.37 -0.570
5 20130107 0.90 0.60 0.62 0.920 <-not matched date

首先通过 merge 将两个 DataFrame 连接在一起左连接:

df1 = df2.merge(df, on='date', how='left')
print (df1)
date ranking part1 part2 part3 part4
0 20130101 3 -0.17 0.67 0.70 0.240
1 20130102 4 -1.03 -0.03 -3.00 -0.440
2 20130103 1 1.59 1.95 1.50 1.335
3 20130104 4 -0.05 -3.25 -0.25 -0.450
4 20130105 2 -0.10 -0.30 -0.37 -0.570
5 20130106 3 NaN NaN NaN NaN

获取用于按排名列查找值的列 numpy.argsort :

cols = df1.columns.difference(df2.columns)

a = np.argsort(-df1[cols].values, axis=1)[np.arange(len(df1)), df1['ranking'].sub(1)]
df1['new'] = df1[cols].values[np.arange(len(df1)), a]

删除不必要的列:

df1 = df1.drop(cols, axis=1)
print (df1)
date ranking new
0 20130101 3 0.24
1 20130102 4 -3.00
2 20130103 1 1.95
3 20130104 4 -3.25
4 20130105 2 -0.30
5 20130106 3 NaN

关于python使用排名号来选择两个数据帧之间的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52290510/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com