我有一个带有timeindex和3列的数据帧,其中包含3D矢量的坐标:
x y z
ts
2014-05-15 10:38 0.120117 0.987305 0.116211
2014-05-15 10:39 0.117188 0.984375 0.122070
2014-05-15 10:40 0.119141 0.987305 0.119141
2014-05-15 10:41 0.116211 0.984375 0.120117
2014-05-15 10:42 0.119141 0.983398 0.118164
我想对也返回向量的每一行应用转换
def myfunc(a, b, c):
do something
return e, f, g
但是如果我这样做:
df.apply(myfunc, axis=1)
我最后得到了一个以元组为元素的熊猫系列。这是因为apply将在不解压的情况下获取myfunc的结果。如何更改myfunc,以便获得具有3列的新df?
编辑:
以下所有解决方案均有效。Series解决方案确实允许使用列名,而List解决方案的执行速度似乎更快。
def myfunc1(args):
e=args[0] + 2*args[1]
f=args[1]*args[2] +1
g=args[2] + args[0] * args[1]
return pd.Series([e,f,g], index=['a', 'b', 'c'])
def myfunc2(args):
e=args[0] + 2*args[1]
f=args[1]*args[2] +1
g=args[2] + args[0] * args[1]
return [e,f,g]
%timeit df.apply(myfunc1 ,axis=1)
100 loops, best of 3: 4.51 ms per loop
%timeit df.apply(myfunc2 ,axis=1)
100 loops, best of 3: 2.75 ms per loop
只返回一个列表而不是元组。
In [81]: df
Out[81]:
x y z
ts
2014-05-15 10:38:00 0.120117 0.987305 0.116211
2014-05-15 10:39:00 0.117188 0.984375 0.122070
2014-05-15 10:40:00 0.119141 0.987305 0.119141
2014-05-15 10:41:00 0.116211 0.984375 0.120117
2014-05-15 10:42:00 0.119141 0.983398 0.118164
[5 rows x 3 columns]
In [82]: def myfunc(args):
....: e=args[0] + 2*args[1]
....: f=args[1]*args[2] +1
....: g=args[2] + args[0] * args[1]
....: return [e,f,g]
....:
In [83]: df.apply(myfunc ,axis=1)
Out[83]:
x y z
ts
2014-05-15 10:38:00 2.094727 1.114736 0.234803
2014-05-15 10:39:00 2.085938 1.120163 0.237427
2014-05-15 10:40:00 2.093751 1.117629 0.236770
2014-05-15 10:41:00 2.084961 1.118240 0.234512
2014-05-15 10:42:00 2.085937 1.116202 0.235327
问题内容: 我正在尝试转换DataFrame,以便将某些行复制给定的次数。例如: 应该转换为: 这与使用count函数进行聚合相反。有没有一种简单的方法可以在熊猫中实现(不使用for循环或列表推导)? 一种可能是允许函数返回多行(的类似方法)。但是,我认为现在在大熊猫中是不可能的。 问题答案: 您可以使用groupby: 所以你得到 您可以根据需要固定结果的索引
我有一个包含3列a、b和c的数据框,还有一个接受3个参数的函数,例如一个小示例: 对于每一行,我希望应用函数并在新的数据帧中返回值a、b、c、x、y、z 我做到了: 它正在返回: 如何获得如下结果,而不是每一行的数组:
问题内容: Python pandas具有pct_change函数,可用于计算数据帧中股票价格的回报: 我正在使用以下代码获取对数返回值,但它给出的值与pct.change()函数完全相同: 问题答案: 这是一种使用来计算日志返回的方法。结果与所计算的总收益相似但不相同。您可以上传示例数据的副本(Dropbox共享链接)以重现您看到的不一致之处吗?
怎么办? **添加详细示例如下***
是否可以附加到不包含任何索引或列的空数据帧? 我已经尝试过这样做,但最终还是得到了一个空的数据帧。 例如。 结果如下所示:
问题内容: 我的问题与此非常相似,但是我需要转换整个数据框,而不仅仅是转换一系列数据框。该功能一次只能在一个系列上使用,不能很好地替代不推荐使用的命令。有没有办法获得与新熊猫版本中的命令相似的结果? 谢谢MikeMüller的示例。如果所有值都可以转换为整数,则效果很好。如果在我的数据帧中我有无法转换为整数的字符串怎么办?例: 然后,我可以运行不赞成使用的函数并获取: 运行命令会给我错误,即使尝试