首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫df到df系列不产生原始df。

熊猫df到df系列不产生原始df。
EN

Stack Overflow用户
提问于 2016-04-07 19:26:13
回答 1查看 448关注 0票数 0

我在做df.apply(myfunction, args=(df2,x,y,z), axis=1)

myfunction()的结果是dataframe。但是,为了使它与df.apply()一起工作,返回对象必须是一个pd.Series。

myfunction()返回的dataframe有不同的列和每列的6行数据。

我将我的df转换为dict,然后将其转换为df.apply(),这样它就可以使用()了。

pd.Series(df.to_dict()):的输出

代码语言:javascript
复制
    book_sale_date                      {0: 2016-03-01 00:00:00, 1: 2016-03-01 00:00:0...
    countx                                    {0: 17, 1: 31, 2: 92, 3: 12, 4: 92, 5: 92}
    dbNUM                             {0: 93353485.0, 1: 93353485.0, 2: 93353485.0, ...
    ...

当我将这个结构转换回dataframe时,如下所示:

代码语言:javascript
复制
pd.DataFrame(df.apply(myfunction, args=(df,x,y,z), axis=1))

结果有正确的列,但只有1行,各列中有正确的数据类型,但都集中在一行中。

例如,book_sale_date列如下所示:

代码语言:javascript
复制
{0: 2016-03-01 00:00:00, 1: 2016-03-01 00:00:0, 2: 2016-03-01 00:00:0, 3: 2016-03-01 00:00:0, 4: 2016-03-01 00:00:0, 5: 2016-03-01 00:00:0}

下面是intermediate_df.to_clipboard()的输出,它是我想要构建的df,但是我不得不将它转换成一个dict,然后用一个系列来处理.apply()

代码语言:javascript
复制
    sale_month  countx  onnfl_cumsum_minmax_c_sum_ratio onnfl_max   onnfl_min   onnfl_sprd  onnfl_sprd_median   onnfl_sprd_neg_count    onnfl_sprd_neg_sum  onnfl_sprd_pos_count    onnfl_sprd_pos_neg_sum_ratio    onnfl_sprd_pos_sum
0   2016-03-01  17  1.54829687344   117.69  -37.31  100.11      0.588235294118  -54.89  0.176470588235  2.82382947714   155.0
1   2016-03-01  31  1.28473432668   220.14  -8.35   177.85      0.354838709677  -72.39  0.290322580645  3.45683105401   250.24
2   2016-03-01  92  1.21749735751           -860.93     0.478260869565  -1185.49    0.195652173913  0.273777087955  324.56
3   2016-03-01  12      13708.76    -937.27 17069.77    292.365 0.25    -1970.44    0.75    9.66292300197   19040.21
4   2016-03-01  92  1.00115588305   13708.76    389.47  15511.95    1413.72 0.282608695652  -376.35 0.413043478261  42.21681945 15888.3
5   2016-03-01  92  1.03090199741   98.32   -4765.51    -5139.15    -471.96 0.489130434783  -5945.64    0.20652173913   0.135643934042  806.49

更新:

我正在经历一些link的变体

我遇到的另一个问题是使用df.apply() --如果想要的结果是dataframe,甚至是正确的方法?

以下是我要做的事:

1)我有一个由2列组成的数据格式df,其中有100万行。

2)这2列是城市名称- city1和city2。每一行都是大城市世界中城市的组合。

3)我有另一种数据,称为df,它有4000座城市的每日每小时温度数据。

4)我想遍历df的每一行,并在df2中进行查找,以提取这两个城市的温度数据,并计算各种统计数据,即特定时间内的温度分布、和、平均值等。

5)结果对象是一个dataframe,每个城市对有6行和大约45列的统计信息。

如果我通过传入传递给df.apply()的相同参数来单独运行一个df行的myfunction(),那么这是可行的。我的问题是,对于df或df.apply()的每一行,我应该在for循环中运行myfunction()吗?这对于100万行df来说更快。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-08 19:01:01

我得到我想要的工作的方式是做以下工作:

1)更改myfunction()函数以返回pd.Series(intermediate_df.unstack())

因此,在将其转换为Series对象之前,先将所需的数据进行堆栈化

2)将对df.apply()的调用更改为:

代码语言:javascript
复制
df.apply(myfunction, args=(df2,x,y,z), axis=1).stack().reset_index(drop=True)

我遵循了下面的link关于如何从DataFrame创建一个系列目标的指导。

也许Pandas文档想要添加一些例子来描述如何做这样的事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36485408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档