如何创建基于其他数据帧数据帧中的一个连接?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何创建基于其他数据帧数据帧中的一个连接?相关的知识,希望对你有一定的参考价值。
我有2个dataframes。其中包含学生批细节和另一个点。我想加入2个dataframes。
Dataframe1包含
+-------+-------+-------+--+
| s1 | s2 | s3 | |
+-------+-------+-------+--+
| Stud1 | Stud2 | Stud3 | |
| Stud2 | Stud4 | Stud1 | |
| Stud1 | Stud3 | Stud4 | |
+-------+-------+-------+--+
Dataframe2包含
+-------+-------+----------+--+
| Name | Point | Category | |
+-------+-------+----------+--+
| Stud1 | 90 | Good | |
| Stud2 | 80 | Average | |
| Stud3 | 95 | Good | |
| Stud4 | 55 | Poor | |
+-------+-------+----------+
我试图标记映射为每个学生相同的数据集。
+-------+-------+-------+----+----+----+
| Stud1 | Stud2 | Stud3 | 90 | 80 | 95 |
| Stud2 | Stud4 | Stud1 | 80 | 55 | 90 |
| Stud1 | Stud3 | Stud4 | 90 | 95 | 55 |
+-------+-------+-------+----+----+----+
我想下面的代码,但它是由一个替代值之一。
s = df3['p1'].map(dfnamepoints.set_index('name')['points'])
df4 = df3.drop('p1', 1).assign(points = s)
答案
解决方案的工作相同的,如果在列df3
存在从Name
所有值:
s = dfnamepoints.set_index('Name')['Point']
df = df3.join(df3.replace(s).add_prefix('new_'))
要么:
df = df3.join(df3.apply(lambda x: x.map(s)).add_prefix('new_'))
要么:
df = df3.join(df3.applymap(s.get).add_prefix('new_'))
print (df)
s1 s2 s3 new_s1 new_s2 new_s3
0 Stud1 Stud2 Stud3 90 80 95
1 Stud2 Stud4 Stud1 80 55 90
2 Stud1 Stud3 Stud4 90 95 55
如果没有,输出是不同的 - 不存在的值(Stud1
)得到NaN
s:
print (dfnamepoints)
Name Point Category
0 Stud2 80 Average
1 Stud3 95 Good
2 Stud4 55 Poor
df = df3.join(df3.applymap(s.get).add_prefix('new_'))
#or
df = df3.join(df3.applymap(s.get).add_prefix('new_'))
print (df)
s1 s2 s3 new_s1 new_s2 new_s3
0 Stud1 Stud2 Stud3 NaN 80 95.0
1 Stud2 Stud4 Stud1 80.0 55 NaN
2 Stud1 Stud3 Stud4 NaN 95 55.0
而对于replace
得到原始值:
df = df3.join(df3.replace(s).add_prefix('new_'))
print (df)
s1 s2 s3 new_s1 new_s2 new_s3
0 Stud1 Stud2 Stud3 Stud1 80 95
1 Stud2 Stud4 Stud1 80 55 Stud1
2 Stud1 Stud3 Stud4 Stud1 95 55
另一答案
Alternativey,你可以创建df.replace()
的2列有关的字典后使用df2
:
pd.concat([df1,df1.replace(dict(zip(df2.Name,df2.Point))).add_prefix('new_')],axis=1)
输出:
s1 s2 s3 new_s1 new_s2 new_s3
0 Stud1 Stud2 Stud3 90 80 95
1 Stud2 Stud4 Stud1 80 55 90
2 Stud1 Stud3 Stud4 90 95 55
以上是关于如何创建基于其他数据帧数据帧中的一个连接?的主要内容,如果未能解决你的问题,请参考以下文章
如何在数据帧中沿值的一列生成随机均匀分布而不必对所述列中的每个值重复?
如何根据 Spark Scala 中其他数据帧中的多列匹配过滤数据帧
如何使用基于整数位置的索引访问 MultiIndex 数据帧中的行