繁体   English   中英

将ndarrays列表转换为数据框

[英]Transform list of ndarrays into dataframe

我有一个要转换为 pd.dataframe 的 ndarray 列表。 该列表如下所示:

from numpy import array
l = [array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
            0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0,
            0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0]),
     array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0]),
     array([0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1])
     ]

ndarrays 的长度是 12(12 个月)的倍数,在这种情况下它等于 36。我希望最终输出如下所示:

二月 行进 四月 可能
1 0 0 0 0 0
2 0 1 1 0 0
3 0 0 1 0 0
1 0 0 0 0 0
2 0 0 0 0 0
3 0 0 0 0 0
1 0 0 1 0 0
2 1 1 0 0 1
3 0 0 0 0 0

重塑

假设l输入,您可以使用:

from calendar import month_abbr
df = (pd.DataFrame(np.vstack(l).reshape(-1, 12),
                   columns=month_abbr[1:])
     )
df.insert(0, 'year', np.tile(range(1, len(l[0])//12+1), len(l)))
print(df)

或者:

df = pd.DataFrame(np.hstack([np.tile(range(1, len(l[0])//12+1), len(l))[:,None],
                             np.vstack(l).reshape(-1, 12)]),
                  columns=['year']+month_abbr[1:])

输出:

   year  Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec
0     1    0    0    0    0    0    0    0    0    0    0    0    1
1     2    0    1    1    0    0    1    0    0    0    0    0    0
2     3    0    0    1    0    0    0    0    0    0    1    0    0
3     1    0    0    0    0    0    0    0    0    0    0    0    0
4     2    0    0    0    0    0    0    0    0    0    0    0    0
5     3    0    0    0    0    0    0    0    0    0    1    1    0
6     1    0    0    1    0    0    0    0    0    0    0    0    0
7     2    1    1    0    0    1    0    0    0    1    1    0    0
8     3    0    0    0    0    0    0    0    0    0    0    0    1

上一个答案:聚合

假设l输入列表并且每个列表代表连续几个月以形成 3 年,您可以在转换为 DataFrame 之前vstack 、聚合(这里使用max )和 reshape :

from calendar import month_abbr
df = pd.DataFrame(np.vstack(l).reshape(len(l), -1, 12).max(axis=0),
                  columns=month_abbr[1:])

输出:

   Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec
0    0    0    1    0    0    0    0    0    0    0    0    1
1    1    1    1    0    1    1    0    0    1    1    0    0
2    0    0    1    0    0    0    0    0    0    1    1    1

由于您想要聚合的方式不明确,您还可以使用不同的轴:

pd.DataFrame(np.vstack(l).reshape(len(l), -1, 12).max(axis=1),
             columns=month_abbr[1:])

输出:

   Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec
0    0    1    1    0    0    1    0    0    0    1    0    1
1    0    0    0    0    0    0    0    0    0    1    1    0
2    1    1    1    0    1    0    0    0    1    1    0    1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM