首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫根据来自另一数据的多列返回数据栏

熊猫根据来自另一数据的多列返回数据栏
EN

Stack Overflow用户
提问于 2017-05-16 21:05:32
回答 2查看 53关注 0票数 0

我已经找到了这个问题的答案,但我甚至不知道如何用一种方法来描述它,那就是给出近似的结果。

情况:

我希望将df中的值列合并到df2中,但是我需要合并多个列,这取决于它是否返回一个值。现在的过程是查看值是否通过连接到高、中、低列上返回,这取决于是否返回一个值。如果某些高值没有返回结果,则只会在中间列上加入,如果仍然没有匹配,则将对LOW列执行相同的处理。我在研究groupby方法,但不知道这是否是实现目标的最佳方法。

下面是一个基本的例子:

代码语言:javascript
复制
df = pd.DataFrame({ 'LOW' : ['Abc', 'Bcd', 'CdE'], 'MID' : ['aBc', 'bCd', 'cDe'], 'HIGH': ['abC', 'bcD', 'cdE'], 'VALUE1': ['1','2','3'], 'VALUE2': ['bb','dd','ee']})

df

+----+-------+------+------+---------+--------+
|    | HIGH  | LOW  | MID  | VALUE1  | VALUE2 |
+----+-------+------+------+---------+--------+
| 0  | abC   | Abc  | aBc  |      1  | bb     |
| 1  | bcD   | Bcd  | bCd  |      2  | dd     |
| 2  | cdE   | CdE  | cDe  |      3  | ee     |
+----+-------+------+------+---------+--------+   

df2 = pd.DataFrame({ 'LOW' : ['Abc-4', 'Bcd-1', 'CdE'], 'MID' : ['aBc*2', 'bCd', 'cDe&3'], 'HIGH': ['abC', 'bcD$22', 'cdE#2']})

df2

+----+---------+--------+-------+
|    |  HIGH   |  LOW   |  MID  |
+----+---------+--------+-------+
| 0  | abC     | Abc-4  | aBc*2 |
| 1  | bcD$22  | Bcd-1  | bCd   |
| 2  | cdE#2   | CdE    | cDe&3 |
+----+---------+--------+-------+

df_result

+----+---------+--------+--------+--------+--------+
|    |  HIGH   |  LOW   |  MID   | VALUE  | VALUE2 |
+----+---------+--------+--------+--------+--------+
| 0  | abC     | Abc-4  | aBc*2  |     1  | bb     |
| 1  | bcD$22  | Bcd-1  | bCd    |     2  | dd     |
| 2  | cdE#2   | CdE    | cDe&3  |     3  | ee     |
+----+---------+--------+--------+--------+--------+

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-16 21:37:35

一个更好的例子会有所帮助,但如果我正确地跟踪,下面的工作如下:

代码语言:javascript
复制
df3 = pd.merge(df2, df, on='HIGH', how='inner', suffixes=['', 'r'])
df4 = pd.merge(df2, df, on='MID', how='inner', suffixes=['', 'r'])
df5 = pd.merge(df2, df, on='LOW', how='inner', suffixes=['', 'r'])
df6 = pd.concat([df3, df4, df5]).drop(['HIGHr', 'MIDr', 'LOWr'], axis=1)

df6

    HIGH    LOW     MID     VALUE1  VALUE2
0   abC     Abc-4   aBc*2   1       bb
1   bcD$22  Bcd-1   bCd     2       dd
2   cdE#2   CdE     cDe&3   3       ee
票数 1
EN

Stack Overflow用户

发布于 2017-05-16 21:23:08

这就是你想要的吗?

代码语言:javascript
复制
import numpy
import pandas as pd
df = pd.DataFrame({ 'LOW' : ['Abc', 'Bcd', 'CdE'], 'MID' : ['aBc', 'bCd', 'cDe'], 'HIGH': ['abC', 'bcD', 'cdE'], 'VALUE1': ['1','2','3'], 'VALUE2': ['bb','dd','ee']})
df1=df.drop(['VALUE1','VALUE2'],axis=1)

df2 = pd.DataFrame({ 'LOW' : ['Abc-4', 'Bcd-1', 'CdE'], 'MID' : ['aBc*2', 'bCd23', 'cDe&3'], 'HIGH': ['abC', 'bcD$22', 'cdE#2']})

rowsum=numpy.sum((df1==df2).astype(int),axis=1)
df_result=df2
df_result['VALUE1']=df.VALUE1*rowsum
df_result['VALUE2']=df.VALUE2*rowsum
df_result

Out[4]: 
     HIGH    LOW    MID VALUE1 VALUE2
0     abC  Abc-4  aBc*2      1     bb
1  bcD$22  Bcd-1  bCd23              
2   cdE#2    CdE  cDe&3      3     ee
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44011568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档