我有一个名为df的大熊猫数据框,其列为“功能”,“ k”,“ r2”。最后两列均包含数字,第一行包含列表字符串(例如“ [Preop SC,Preop CC] “)。
我想将数据帧切成较小的数据帧。使用嵌套循环,每个“功能”-“ k”组合都有一个数据框。
不幸的是,它抛出了ValueError: Lengths must match to compare
。
我也尝试了不同的切片方法来生成z:df[df["Features"]==feat]
和df.iloc
。由于当我打印功能部件时,将显示[“ Preop SC”,“ Preop CC”]而不是如下所述的无标记的版本。我还尝试通过将整个项目转换为字符串以使用.replace方法来删除它们,但无济于事。
似乎没有什么能帮我切入功能。 (仅适用于k)
编辑:Groupby似乎也不起作用,尽管我也是新手 这是代码:
import numpy as np
import pandas as pd
features=[['Preop SC', 'Preop CC'], ['Preop CC', 'Postoptag'], ['Preop CC',
'Pachy'], ['Preop CC', 'K2']]
df=[]
count=1
execute=1
while execute<3:
for i in features:
r2=np.random.normal()
df.append([i,count,r2])
count+=1
execute+=1
count=1
df=pd.DataFrame(df)
df.columns=["Features","KNeighbors","r2 score"]
summary=[] #Mean of results by feature-k combination
for feat in features:
for k in range(1,5):
temp=o.loc[(o["Features"]==feat)&(o["KNeighbors"]==k):,]
summary.append([feat,k,temp["r2 score"].mean()])
summary=pd.Dataframe(summary)
print(summary)
~~~~~~~~~~~~~~~~~~~~
This is what df looks like:
Features KNeighbors r2 score
0 [Preop SC, Preop CC] 1 0.880299
1 [Preop CC, Postoptag] 2 0.681024
2 [Preop CC, Pachy] 3 -1.925969
3 [Preop CC, K2] 4 1.132059
4 [Preop SC, Preop CC] 1 0.397732
5 [Preop CC, Postoptag] 2 -0.969017
6 [Preop CC, Pachy] 3 -0.173293
7 [Preop CC, K2] 4 0.277422
this is what summary should look like
0 [Preop SC, Preop CC] 1 0.6390155
1 [Preop CC, Postoptag] 2 -0.1439965
2 [Preop CC, Pachy] 3 -1.049631
3 [Preop CC, K2] 4 0.7047405
Any tips will be dearly appreciated
答案 0 :(得分:0)
使用.apply方法将列表转换为字符串,即可使用.groupby:
df["Features"]=df.Features.apply(str)
summary=df.groupby("Features").mean()
print(summary)