考虑以下 Dataframe df
,其中feature
列是数据集中以逗号分隔的要素名称字符串(df
可能很大)。
index features
1 'f1'
2 'f1, f2'
3 'f1, f2, f3'
我还有一个函数get_weights
,它接受逗号分隔的特征名称字符串,计算并返回一个列表,其中包含每个给定权重的权重,实现细节并不重要,为了简单起见,让我们考虑该函数为每个特征返回相等的权重:
import numpy as np
def get_weights(features):
features = features.split(', ')
return np.ones(len(features)) / len(features)
使用panda,我如何在df
上应用get_weights
,并在新的 Dataframe 中获得如下结果:
index f1 f2 f3
1 1 0 0
2 0.5 0.5 0
3 0.33 0.33 0.33
也就是说,在所得到的 Dataframe 中,df.features
中的特征被转换成列,所述列包含每行该特征的权重。
4条答案
按热度按时间m3eecexj1#
备选案文1
考虑到目标是将函数应用于 Dataframe 功能,可以按如下方式使用
pandas.Series.apply
然而,为了获得理想的输出,仍然有几件事要做。
首先,调整前面的操作,用
0
填充NaN
第二,希望列的名称分别为
f1
、f2
和f3
。现在,从前面的操作开始,由于缺少从
1
开始的列index
,因此可以简单地执行以下操作最后,如果目标是使索引列成为 Dataframe 的索引,则可以使用
pandas.DataFrame.set_index
,如下所示备选案文2
如果不想使用
.apply()
(按照下面的第一个注解),另一个选项和满足所有要求的一行程序将创建一个新的 Dataframe ,如下所示注:
.apply()
有强烈的意见。建议阅读以下内容:When should I (not) want to use pandas apply() in my code?s3fp2yjn2#
您可以用途:
输出:
lyr7nygr3#
使用函数get_dummies from panda,您可以执行以下操作:
vngu2lb84#
输出: