Pandas从循环创建数据帧

时间:2017-01-17 18:55:12

标签: python python-3.x loops pandas dataframe

我正在尝试创建一个数据框,以便我可以轻松地将其发送到CSV,否则我必须手动执行此过程..

我希望这是我的最终输出。每个人都有一个月份和年份的组合,从2014年1月1日开始,到2016年12月1日:

<ion-view title="Login" hide-back-button="true">
到目前为止

代码:

      Name    date
0     ben     1/1/2014
1     ben     2/1/2014
2     ben     3/1/2014
3     ben     4/1/2014
....

12    dan     1/1/2014
13    dan     2/1/2014
14    dan     3/1/2014

当我尝试循环创建数据帧时,它不起作用,我得到索引错误(因为不匹配的列表),我不知所措。

我已经做了很多搜索,发现了一些类似的链接,但我无法对我的工作进行逆向工程。

Filling empty python dataframe using loops

How to build and fill pandas dataframe from for loop?

我不希望任何人觉得他们正在做我的作业和#34;所以如果我对简单的事情感到满意,请告诉我。

2 个答案:

答案 0 :(得分:3)

我认为您可以将product用于date列与from itertools import product days = [1] months = list(range(1, 13)) years = ['2014', '2015', '2016'] listof_people = ['ben','dan','nathan', 'gary', 'Mark', 'Sean', 'Tim', 'Chris'] df1 = pd.DataFrame(list(product(listof_people, months, days, years))) df1.columns = ['Name', 'month','day','year'] print (df1) Name month day year 0 ben 1 1 2014 1 ben 1 1 2015 2 ben 1 1 2016 3 ben 2 1 2014 4 ben 2 1 2015 5 ben 2 1 2016 6 ben 3 1 2014 7 ben 3 1 2015 8 ben 3 1 2016 9 ben 4 1 2014 10 ben 4 1 2015 ... ... 的所有组合:

df1['date'] = pd.to_datetime(df1[['month','day','year']])
df1 = df1[['Name','date']]
print (df1)
      Name       date
0      ben 2014-01-01
1      ben 2015-01-01
2      ben 2016-01-01
3      ben 2014-02-01
4      ben 2015-02-01
5      ben 2016-02-01
6      ben 2014-03-01
7      ben 2015-03-01
...
...
{{1}}

答案 1 :(得分:2)

mux = pd.MultiIndex.from_product(
    [listof_people, years, months],
    names=['Name', 'Year', 'Month'])

pd.Series(
    1, mux, name='Day'
).reset_index().assign(
    date=pd.to_datetime(df[['Year', 'Month', 'Day']])
)[['Name', 'date']]

enter image description here