Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在groupby之后将数据帧拆分为多个列_Python_Pandas - Fatal编程技术网

Python 如何在groupby之后将数据帧拆分为多个列

Python 如何在groupby之后将数据帧拆分为多个列,python,pandas,Python,Pandas,我希望能够使用pandas中的groupby按列对数据进行分组,然后将其拆分,使每个组都是dataframe中自己的列 e、 g: 进入 我确信应该从df.groupby('time')开始,但我似乎无法找到正确的方法来使用concat(或其他函数)构建我想要的分割数据帧。在API中我可能忽略了一些简单的函数。我同意@PhillipCloud。我假设这可能是解决问题的中间步骤,但如果没有中间步骤,你可能更容易直奔你真正想解决的问题 但如果这是您真正想要的,您可以使用: >>>

我希望能够使用pandas中的groupby按列对数据进行分组,然后将其拆分,使每个组都是dataframe中自己的列

e、 g:

进入


我确信应该从df.groupby('time')开始,但我似乎无法找到正确的方法来使用concat(或其他函数)构建我想要的分割数据帧。在API中我可能忽略了一些简单的函数。

我同意@PhillipCloud。我假设这可能是解决问题的中间步骤,但如果没有中间步骤,你可能更容易直奔你真正想解决的问题

但如果这是您真正想要的,您可以使用:

>>> df.groupby('time').apply(
        lambda g: pd.Series(g['data'].values)
    ).rename(columns=lambda x: 'data%s' % x)

      data0  data1
time              
1         2    2.1
2         3    3.1
3         4    4.1

您想要的帧是中间步骤吗?拥有名为data1、data2等的列将使您以后的生活变得困难。这是我想与其他数据匹配的事情。我正在读取的特定文件与写入列中的每个数据块一起存储。当然,我可以在
groupby
对象上进行计算,但接下来我必须将其他内容转换为第一种形式。有没有什么特别的原因让我不想在单独的栏目里写东西?谢谢。把它转换成连续剧是我想不出的步骤。你和@PhillipCloud似乎都认为这不是我想要的。实际上,它只是两个索引数据,早期的代码将它们作为单独的列,但我尝试将其转换为使用多索引。为什么我不喜欢这样的专栏?@f4hy如果这是你的最终结果,那么你就没事了,你不必担心我们说的话。:)但是,如果这是一个中间步骤,那么它只会使以后的操作更加困难,因为最终会得到通用列名(实际上代表变量)。因此,您可能最终会将这些列堆叠到多个索引中,或者融合到一列或其他内容中。。。这可以避免在第一步做同样的事情。但正如我所说的,如果这是你的最终结果,那么你就没事了:)是的,通用列名是因为每一列都是独立的度量,字面上是measurement1,measurement2,每一列都需要完全独立地处理。使用具有第一个索引重复范围(0,20)和第二个索引重复范围(0,20)的多索引来跟踪它是哪一组20,实际上看起来并不更好。如果有一个真正的原因,多索引更好,当第二个索引只需要是唯一的,但没有意义时,我可以切换到它,但这似乎做的工作。我希望你能有个理由用其他方式做会更好。
       data1  data2  ... dataN
 time  
 1     2.0      2.1  ...
 2     3.0      3.1  ...
 3     4.0      4.1  ...
>>> df.groupby('time').apply(
        lambda g: pd.Series(g['data'].values)
    ).rename(columns=lambda x: 'data%s' % x)

      data0  data1
time              
1         2    2.1
2         3    3.1
3         4    4.1