下面的代码可以工作,但只是想知道这是否可以在没有for循环的情况下完成?
data = {'Date': ['2023-01-01', '2023-01-01','2023-01-01', '2023-01-03', '2023-01-03', '2023-01-03'],
'p1': [5000, 7000, 6421, 9851, 1385, 1475],
'p2': [22000, 27000, 25000, 29000, 35000, 1257]
}
df_orig = pd.DataFrame(data)
def norm_std(x):
return (x- np.mean(x))/np.std(x)
def s_d(df, c):
df[c] = df.groupby('Date')[c].transform(norm_std)
for c in df_orig.columns[]:
s_d(df_orig, c)
3条答案
按热度按时间inb24sb21#
可以使用
apply
和difference
从apply
中排除Date
列:df_orig:
bis0qfac2#
因为你的
norm_std
工作在与原始索引相同的 Dataframe 上,你可以使用apply
:idv4meu83#
可能的解决方案之一是:
不需要 s_d 函数。
其他可能性:
要使 FutureWarning 静音,请将 norm_std 定义为: