【问题标题】:Reshaping Pandas data frame (a complex case!)重塑 Pandas 数据框(一个复杂的案例!)
【发布时间】:2015-08-29 00:17:24
【问题描述】:

我想重塑以下数据框:

索引编号 1111 5 58.99 2222 5 75.65 1000 4 66.54 11 4 60.33 143 4 62.31 145 51 30.2 1 7 61.28

重构后的数据框应如下所示:

编号 1 2 3 5 58.99 75.65 南 4 66.54 60.33 62.31 51 30.2 楠楠 7 61.28 楠楠

我使用以下代码来执行此操作。

import pandas as pd
dtFrame = pd.read_csv("data.csv")
ids = dtFrame['id'].unique()
temp = dtFrame.groupby(['id'])
temp2 = {}
for i in ids:
    temp2[i]= temp.get_group(i).reset_index()['numbers'] 
dtFrame = pd.DataFrame.from_dict(temp2)
dtFrame = dtFrame.T

虽然上面的代码解决了我的问题,但是有没有更简单的方法来实现这一点。我尝试了数据透视表,但它并没有解决问题,也许它需要在每个组中具有相同数量的元素。或者可能还有其他我不知道的方式,请分享您的想法。

【问题讨论】:

    标签: python-2.7 numpy pandas


    【解决方案1】:
    In [69]: df.groupby(df['id'])['numbers'].apply(lambda x: pd.Series(x.values)).unstack()
    Out[69]: 
            0      1      2
    id                     
    4   66.54  60.33  62.31
    5   58.99  75.65    NaN
    7   61.28    NaN    NaN
    51  30.20    NaN    NaN
    

    这与您正在执行的操作非常相似,只是循环被apply 替换。 pd.Series(x.values) 有一个索引,默认范围是从0 开始的整数。索引值成为列名(上图)。不同的组可能有不同的长度并不重要。 apply 方法为您对齐各种索引(并用NaN 填充缺失值)。多么方便!

    我学会了这个技巧here

    【讨论】:

      猜你喜欢
      • 2012-12-10
      • 2020-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-23
      • 2015-08-04
      • 1970-01-01
      相关资源
      最近更新 更多