拆分数据框的数据框并插入一列

水库投资

我有一大堆带有日期标记的文件,其文件名是日期。每个文件都有一组具有相同结构的记录,即位于中dataframe

我想将它们合并为一个dataframe,文件名作为其中的一列。

示例代码如下。

import pandas as pd
import numpy as np
df1 = pd.DataFrame({
    'a': np.random.rand(6),
    'b': np.random.choice([4,9,np.nan], 6),
})

df2 = df1*3
df3 = np.sqrt(df2)
df4 = df1*df3
df5 = df2*0.5
df6 = df2*df2

df = pd.DataFrame({
    'fname': pd.date_range('1/1/2018', periods=6, freq='D'),
    'df': [df1, df2, df3, df4, df5, df6]
})

预期输出df为:

    a           b   fname
0   0.634776    NaN 2018-01-01
1   0.616349    NaN 2018-01-02
2   0.502559    NaN 2018-01-03
3   0.545378    4.0 2018-01-04
4   0.658668    4.0 2018-01-05
5   0.822417    9.0 2018-01-06
0   1.904328    NaN 2018-01-01
1   1.849046    NaN 2018-01-02
2   1.507678    NaN 2018-01-03
3   1.636133    2.0 2018-01-04
4   1.976004    2.0 2018-01-05
5   2.467252    3.0 2018-01-06
...and so on...
耶斯列尔

我认为更好的方法是create dict,因此可以使用concat

d = dict(zip(pd.date_range('1/1/2018', periods=6, freq='D'),
              [df1, df2, df3, df4, df5, df6]))

df = (pd.concat(d)
       .reset_index(level=1, drop=True)
       .rename_axis('fname')
       .reset_index()
       )

或通过concat参数将DataFrame列表传递给keys

df = (pd.concat([df1, df2, df3, df4, df5, df6], 
               keys=pd.date_range('1/1/2018', periods=6, freq='D'))
       .reset_index(level=1, drop=True)
       .rename_axis('fname')
       .reset_index()
       )

print (df.head(10))
       fname         a     b
0 2018-01-01  0.075056   9.0
1 2018-01-01  0.646019   9.0
2 2018-01-01  0.656301   NaN
3 2018-01-01  0.420031   4.0
4 2018-01-01  0.239017   9.0
5 2018-01-01  0.921222   NaN
6 2018-01-02  0.225168  27.0
7 2018-01-02  1.938057  27.0
8 2018-01-02  1.968903   NaN
9 2018-01-02  1.260093  12.0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章