我有一個 csv 文件:
ids year mean
1 2000 200
2 2000 199
3 2000 193
4 2000 189
1 2001 205
2 2001 197
3 2001 197
4 2001 196
.
.
.
4 2016 212
我想遍歷每個人id
來計算他們每個人的人係數並將他們放在一個單獨的列表中。我怎樣才能做到這一點?
我嘗試了一些永遠無法奏效的事情:
import pandas as pd
import numpy as np
import scipy.stats as stats
path = 'C:/path/'
#%%
df = pd.read_csv(path + 'mycsvfile.csv')
res = []
for i in range(df['id'].min(), df['id'].max()):
x = stats.pearsonr(df['year'], df['mean'])
res.append(x)
df = pd.DataFrame(res)
請注意,在
for i in range(df['id'].min(), df['id'].max()):
x = stats.pearsonr(df['year'], df['mean'])
res.append(x)
你有i
,它從來沒有用在 for 循環體中,所以你實際上一次又一次地計算相同的東西。您需要的是 groupby,請考慮以下簡單示例
import pandas as pd
df = pd.DataFrame({'id':[1,1,2,2,3,3],'x':[1,2,3,4,5,6],'y':[1,2,4,3,5,6]})
out = df.groupby('id').apply(lambda data:stats.pearsonr(data['x'],data['y']))
print(out)
輸出
id
1 (1.0, 1.0)
2 (-1.0, 1.0)
3 (1.0, 1.0)
dtype: object
說明:groupby
id,然後對每組應用 Pearson 的 R 計算。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句