我有2个熊猫数据框
df1=
student courses
0 student1 Math, Science, Gym
1 student2 gym, Geography, Art
2 student3 Chemistry
3 student4 Art, math, physics
4 student5 biology, history
5 student6 Robotics
df2=
class weight
0 math 9.00
1 science 8.00
2 gym 4.00
3 geography 6.00
4 art 7.00
5 chemistry 8.50
6 physics 10.00
7 biology 9.00
8 history 7.50
9 Philosophy 9.00
10 Physical Chemistry 10.00
11 Computer Science 8.75
我想使用df2“类”列中的可能值搜索df1中的“课程”列,然后返回适当的合计权重。
这是我目前所知道的
#extract courses
class_list = df2['class'].values.tolist()
class_list_regex= ['\\b%s\\b' % x for x in class_list]
class_list_pattern = '|'.join(class_list_regex)
final_df = df1['courses'].str.findall('('+class_list_pattern+ ')',flags=re.IGNORECASE)
导致
0 [Math, Science, Gym]
1 [gym, Geography, Art]
2 [Chemistry]
3 [Art, math, physics]
4 [biology, history]
Name: courses, dtype: object
我怎样才能得到这样的东西
student matched_courses total weight
0 student1 [Math, Science, Gym] 21.0
1 student2 [gym, Geography, Art] 17.0
2 student3 [Chemistry] 8.5
3 student4 [Art, math, physics] 26.0
4 student5 [biology, history] 16.5
5 student6 [] 0.0
任何帮助都将不胜感激。谢谢
试试这个解决方案
import re
from sklearn.preprocessing import MultiLabelBinarizer
df1["courses"] = df1["courses"].apply(lambda x: re.sub('\s+', '', str(x).lower()).split(","))
mlb = MultiLabelBinarizer()
course_dummies = pd.DataFrame(mlb.fit_transform(df1["courses"]),columns=mlb.classes_, index=df1.index)
course_dummies_t=course_dummies.T.reset_index()
course_dummies_t=course_dummies_t.rename(columns={"index":"class"})
merge = pd.merge(course_dummies_t,df2,on="class",how="left")
df1["total weight"]=merge[range(0,6)].multiply(merge["weight"], axis="index").sum(axis=0)
我有两个Pandas Dataframe和,其中是的一部分,我想创建一个Dataframe,其中包含中的code>。 以下是一个例子: 注: 我的DataFrame可能有多个列,但是必须仅在列上进行匹配。
我有两个Dataframes一个与日期集(df1)和另一个与emp_ids集(df2)。我试图创建一个新的Dataframe,这样df2中的每个emp_id都被标记为df1中的每个日期。 下面给出了我的数据帧的外观 df1 df2 预期产出: 我将日期列转换为字符串,并尝试执行以下操作,但返回的数据框为空 我尝试做
我有两个具有多列的数据帧。 我想比较df1['id']和df2['id'],并返回一个新的df,其中列['correct_id']具有匹配值。例子: df1: df2 这是我的代码: 我得到的结果是: 预期输出: 我该怎么解决这个问题拜托
我有点被困在提取一个变量的值和另一个变量的条件上。例如,以下数据帧: 当时,如何获取的值?每次提取的值时,都会得到一个对象,而不是字符串。
我和Spark一起在Databricks上工作。编程语言是Scala。 我有两个数据帧: 主数据框:见截图:1 查找数据帧:参见屏幕截图3 我想: 查找主数据框中“年龄”=-1的所有行 我对如何做这件事伤了脑筋。我唯一想到的是将dataframe存储为DataRicks中的表,并使用SQL语句(SQL.Context.SQL…),结果非常复杂。 我想知道是否有更有效的方法。 编辑:添加可复制的示例
我有两个数据帧,都有一个键列,可能有重复项,但数据帧大部分都有相同的重复键。我希望在该键上合并这些数据帧,但这样做的方式是,当两者具有相同的副本时,这些副本将分别合并。此外,如果一个数据帧的键的副本比另一个多,我希望它的值填充为NaN。例如: 我正在尝试获得以下输出 所以基本上,我想把复制的K2键当作K2_1,K2_2。。。然后在数据帧上进行how='outer'合并。你知道我怎样才能做到这一点吗