我有一个简单的函数,它接受一个数字序列,并返回一个4个值的元组,例如该序列的(最小值,最大值,第一个,最后一个)元素。我不能只使用内置函数来获取每个值;我需要实际使用我的函数)。* 我希望将此函数应用于DataFrame的所有列,并在新的DataFrame中返回结果,同时保留索引。
几天前,我做了以下工作:将初始DataFrame转换为一系列输入元组;apply()
my函数,创建一系列输出元组;并从这个输出序列创建一个新的DataFrame,将输出元组扩展到各个列中。
def fn(a): return (min(a), max(a), a[0], a[-1])
df = pd.DataFrame([(2, 4, 5, 1, 3), (12, 14, 15, 11, 13), (20, 40, 50, 10, 30)], index=['a', 'b', 'c'])
sr = pd.Series(df.to_numpy().tolist(), index=df.index)
sr2 = sr.apply(fn)
print(pd.DataFrame(sr2.values.tolist(), index=df.index))
0 1 2 3
a 1 5 2 3
b 11 15 12 13
c 10 50 20 30
然而,现在几天过去了,胜利的喜悦已经消退,感觉这段代码不可能是正确的,它的步骤太多,矢量化不够,我确信我错过了一些东西。
做这件事有更简单/更快/更好的方法吗?
1条答案
按热度按时间rslzwgfq1#
使用:
agg
:输出:
备选方案