python - 比较两个数据帧的列并创建一个新数据帧

标签 python python-3.x pandas dataframe

我有两个不同的数据框,我想比较 df A 中每一行的一些列

数据框A:

M_ID From To M_Type    T_Type  T_Length T_Weight #Trucks Loading_Time
1025 A    B  Boxes     Open    12-Tyre  22       3       27-March-2019 6:00PM
1029 C    D  Cylinders Trailer High     23       2       28-March-2019 6:00PM
1989 G    H  Scrap     Open    14-Tyre  25       5       26-March-2019 9:00PM

数据框B

 T_ID From To T_Type  T_Length T_Weight #Trucks  Price
6569  A    B  Open    12-Tyre  22       5        1500
8658  G    H  Open    14-Tyre  25       4        1800
4595  A    B  Open    12-Tyre  22       3        1400
1252  A    B  Trailer Low      28       5        2000
7754  C    D  Trailer High     23       4        1900
3632  G    H  Open    14-Tyre  25       10       2000
6521  C    D  Trailer High     23       8        1700
8971  C    D  Open    12-Tyre  22       8        1200
4862  G    H  Trailer High     25       15       2200

我想比较 A 和 B 的某些列,即“From、To、T_Type、T_length、T_Weight、#Trucks”

两个数据帧的“From、To、T_Type、T_length、T_Weight”必须相等,但 B[#Trucks]>=A[#Trucks],当此条件为真时,应按价格对匹配项进行排序并创建一个具有 M_ID 和 T_ID 的新数据框,如下所示

数据框结果

Manufacturer   Best_match  Second_best_match 
1025           4595        6569
1029           6521        7754
1989           3632         - 

最佳答案

你可以尝试:

dfc = pd.merge(dfa, dfb, on=['From', 'To', 'T_Type', 'T_Length', 'T_Weight'], how='inner')

dfc.drop(['From', 'To', 'M_Type', 'T_Weight', 'T_Length', 'Loading_Time', 'T_Type'], axis = 1,inplace=True)
dfc = dfc[dfc['#Trucks_y'] >= dfc['#Trucks_x']].drop(['#Trucks_y', '#Trucks_x'], axis=1)
dfc.rename(columns={"M_ID": "Manufacturer", "T_ID": "BestMatches"}, inplace=True)
dfc = dfc.groupby(['Manufacturer', 'Price'])['BestMatches'].agg('first').reset_index().drop(['Price'], axis = 1)

dfc = dfc.groupby(['Manufacturer'])['BestMatches'].agg(list).reset_index()
dfd = dfc['BestMatches'].apply(pd.Series)
dfc.drop(["BestMatches"],axis = 1,inplace = True)
dfc = dfc.join(dfd).fillna('-')

print(dfc)

输出:

   Manufacturer       0       1
0          1025  4595.0  6569.0
1          1029  6521.0  7754.0
2          1989  3632.0       -

关于python - 比较两个数据帧的列并创建一个新数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55335556/

相关文章:

python - 为什么我们要为链表中的头节点创建不同的类?

Python: SSL.Context(SSL.SSLv3_METHOD) = 没有这样的协议(protocol)

dictionary - 如何在Python 3中实现UserDict.DictMixin的功能?

python-3.x - python pandas 特殊字符作为分隔符

group-by - 时间石斑鱼、 Pandas

python - 对 python pandas 数据框进行装箱 : extracting bin centers and the sum of another column

python - $是什么意思?壳里的意思?

Python 3 如果不是条件简化

python - 跨行对 Pandas 数据框进行分组

python - 对包含 str 和元组的 Pandas MultiIndex 进行排序