当前位置: 首页 > 知识库问答 >
问题:

将元素为字典的列拆分为多个列[重复]

武晨
2023-03-14

我有一个包含字典作为元素的单列的DataFrame。这是以下代码的结果:

dg # is a pandas dataframe with columns ID and VALUE. Many rows contain the same ID

def seriesFeatures(series):
    """This functions receives a series of VALUE for the same ID and extracts
    tens of complex features from the series, storing them into a dictionary"""
    dico = dict()
    dico['feature1'] = calculateFeature1
    dico['feature2'] = calculateFeature2
    # Many more features
    dico['feature50'] = calculateFeature50
    return dico

grouped = dg.groupby(['ID'])
dh = grouped['VALUE'].agg( { 'all_features' : lambda s: seriesFeatures(s) } )
dh.reset_index()
# Here I get a dh DataFrame of a single column 'all_features' and
# dictionaries stored on its values. The keys are the feature's names

我需要将此'all_features'列拆分为尽可能多的列(我有太多的行和列,并且我无法更改seriesFeatures函数),因此输出将是一个包含列IDFEATURE1FEATURE2的数据帧,功能3<代码>功能50。这样做的最佳方式是什么?

一个具体而简单的例子:

dg = pd.DataFrame( [ [1,10] , [1,15] , [1,13] , [2,14] , [2,16] ] , columns=['ID','VALUE'] )

def seriesFeatures(series):
    dico = dict()
    dico['feature1'] = len(series)
    dico['feature2'] = series.sum()
    return dico

grouped = dg.groupby(['ID'])
dh = grouped['VALUE'].agg( { 'all_features' : lambda s: seriesFeatures(s) } )
dh.reset_index()

但当我尝试用pd.Series或pd.DataFrame包装它时,它说如果数据是标量值,则必须提供索引。提供索引=['feature1','feature2'],我会得到奇怪的结果,例如使用:dh=grouped['VALUE'].agg({'all_features':lambda s:pd.DataFrame(seriesfatures,index=['feature1','feature2'])

共有1个答案

傅自明
2023-03-14

我认为您应该将dict包装成一个系列,然后它将在groupby调用中展开(但随后使用apply而不是agg,因为它不再是聚合(标量)结果):

dh = grouped['VALUE'].aply(lambda s: pd.Series(seriesFeatures(s)))

之后,可以将结果重塑为所需的格式。

通过您的简单示例,这似乎是可行的:

In [22]: dh = grouped['VALUE'].apply(lambda x: pd.Series(seriesFeatures(x)))
In [23]: dh

Out[23]:
ID
1   feature1     3
    feature2    38
2   feature1     2
    feature2    30
dtype: int64

In [26]: dh.unstack().reset_index()
Out[26]:
   ID  feature1  feature2
0   1         3        38
1   2         2        30
 类似资料:
  • 我有以下,其值是字典: 我希望获得所需的输出: 我怎样才能把字典分成单独的列呢? 我见过使用函数拆分字符串的列,但不确定如何将其应用于字典作为值的情况。

  • 我有一个非常简单的,其中每个单元格都包含一个列表。我想将列表中的每个元素拆分为它自己的列。我可以通过导出值,然后创建一个新的

  • 我有一个Pandas DataFrame列,其中包含一个列表中的多个列表。类似于这样: 我想将列表拆分为多列,因此输出应该是这样的: 请帮我做这件事。预先感谢

  • 问题内容: 我有这个清单(): 我想要这样的东西: 换句话说,我想使用值作为分隔符将列表拆分为子列表,以获得列表列表()。我正在寻找Java 8解决方案。我已经尝试过,但是我不确定这是我要找的东西。谢谢! 问题答案: 我目前想出的唯一解决方案是实现自己的自定义收集器。 在阅读解决方案之前,我想添加一些有关此的注释。我将这个问题更多地当作编程练习,我不确定是否可以使用并行流来完成。 因此,您必须意识

  • 我有一个对象(Pos)与此模型的集合: 对象列表如下所示: 我想按beforeChangement或afterChangement==”字段拆分此对象列表要使用此格式(列表列表)

  • 我有一个熊猫的数据框,有一列是向量: 我想把它拆分成这样的元素: df2=pd.DataFrame({'ID':[1,2],'A':[1,4],'B':[2,5],'C':[3,6]}) 我试过但是没有运气.任何帮助将不胜感激。