Pandas将Series附加到DataFrame以写入文件

时间:2014-12-12 22:12:13

标签: python pandas dataframe

我有要在

上计算平均值的数据帧列表
~ pieces[1].head()

   Sample Label    C_RUNTIMEN  N_TQ  N_TR  ...   N_GEAR1  N_GEAR2  N_GEAR3  \
301       manual   82.150833     7    69  ...     3.615    1.952    1.241   
302       manual   82.150833     7    69  ...     3.615    1.952    1.241   
303       manual   82.150833     7    69  ...     3.615    1.952    1.241   
304       manual   82.150833     7    69  ...     3.615    1.952    1.241   
305       manual   82.150833     7    69  ...     3.615    1.952    1.241

,所以我正在遍历它们 - >

pieces = np.array_split(df,size)
output = pd.DataFrame()
for piece in pieces:
    dp = piece.mean()
    output = output.append(dp,ignore_index=True)   

不幸的是输出已经排序了(列名在输出中是按字母顺序排列的),我想保留原始列顺序(如上图所示)。

~ output.head()

  C_ABSHUM  C_ACCFUELGALN      C_AFR     C_AFRO  C_FRAIRWS  C_GEARRATIO  \
  0  44.578937      66.183858  14.466816  14.113321  18.831117     6.677792   
  1  34.042593      66.231229  14.320409  14.113321  22.368983     6.677792   
  2  34.497194      66.309320  14.210066  14.113321  25.353414     6.677792   
  3  43.430931      66.376632  14.314854  14.113321  28.462130     6.677792   
  4  44.419204      66.516515  14.314653  14.113321  32.244107     6.677792   

我尝试过concat等的变种但没有成功。有没有不同的方式来考虑这个?

1 个答案:

答案 0 :(得分:1)

我的建议是使用pd.concat连接数据帧列表。这将允许您使用标准group-by / apply。在此示例中,multi_df是MultiIndex,其行为类似于标准数据框,只有索引和group by is a little different

x = []
for i in range(10):
    x.append(pd.DataFrame(dict(zip(list('abc'), [i + 1, i + 2, i + 3])), index = list('ind')))

现在x包含形状

的数据框列表
   a  b  c
i  2  3  4
n  2  3  4
d  2  3  4

并且

multi_df = pd.concat(x, keys = range(len(x)))
result = multi_df.groupby(level = [0]).apply(np.mean)

我们得到一个看起来像

的数据框
    a   b   c
0   1   2   3
1   2   3   4
2   3   4   5
3   4   5   6
4   5   6   7
5   6   7   8
6   7   8   9
7   8   9  10
8   9  10  11
9  10  11  12

然后你可以调用result.to_csv(' filepath')来写出来。