2024-09-29 23:22:24 发布
网友
我有一个按日期组织的熊猫数据框,我试图按年份(在一个名为“年”的列中)拆分。我想每年返回一个数据帧,名称类似于“df19XX”。你知道吗
我想写一个“For”循环来处理这个。。。有点像。。。你知道吗
for d in [1980, 1981, 1982]: df(d) = df[df['year']==d]
。。。它将返回三个数据帧,分别称为df1980、df1981和df1982。你知道吗
谢谢!你知道吗
您可以遍历groupby:
In [11]: df = pd.DataFrame({"date": pd.date_range("2012-12-28", "2013-01-03"), "A": np.random.rand(7)}) In [12]: df Out[12]: A date 0 0.434715 2012-12-28 1 0.208877 2012-12-29 2 0.912897 2012-12-30 3 0.226368 2012-12-31 4 0.100489 2013-01-01 5 0.474088 2013-01-02 6 0.348368 2013-01-03 In [13]: g = df.groupby(df.date.dt.year) In [14]: for k, v in g: ...: print(k) ...: print(v) ...: print() ...: 2012 A date 0 0.434715 2012-12-28 1 0.208877 2012-12-29 2 0.912897 2012-12-30 3 0.226368 2012-12-31 2013 A date 4 0.100489 2013-01-01 5 0.474088 2013-01-02 6 0.348368 2013-01-03
我认为最好是让dict有变量,然后在locals()字典里乱来(我声称使用locals(),所以不是“pythonic”):
locals()
In [14]: {k: grp for k, grp in g} Out[14]: {2012: A date 0 0.434715 2012-12-28 1 0.208877 2012-12-29 2 0.912897 2012-12-30 3 0.226368 2012-12-31, 2013: A date 4 0.100489 2013-01-01 5 0.474088 2013-01-02 6 0.348368 2013-01-03}
尽管您可能会考虑动态计算(而不是存储在dict或变量中)。您可以使用^{}:
In [15]: g.get_group(2012) Out[15]: A date 0 0.865239 2012-12-28 1 0.019071 2012-12-29 2 0.362088 2012-12-30 3 0.031861 2012-12-31
像这样的?同时使用@Andy的df
variables = locals() for i in [2012, 2013]: variables["df{0}".format(i)]=df.loc[df.date.dt.year==i] df2012 Out[118]: A date 0 0.881468 2012-12-28 1 0.237672 2012-12-29 2 0.992287 2012-12-30 3 0.194288 2012-12-31 df2013 Out[119]: A date 4 0.151854 2013-01-01 5 0.855312 2013-01-02 6 0.534075 2013-01-03
您可以遍历groupby:
我认为最好是让dict有变量,然后在
locals()
字典里乱来(我声称使用locals()
,所以不是“pythonic”):尽管您可能会考虑动态计算(而不是存储在dict或变量中)。您可以使用^{} :
像这样的?同时使用@Andy的df
相关问题 更多 >
编程相关推荐