我正在尝试遍历列标题并填充一个包含每个类别的平均收入的列表。 我收到此错误,并且尝试了很多其他尝试来修复它。 所以我的数据框看起来像这样(看起来我没有足够的点来粘贴图像,但这是它的链接): each row in the dataframe represent an idividual movie. column revenue_adj populated with revenue values, one column for each genre populated with TRUE/FALSE indicating that the movie falls under that specific genre.
此代码可以正常工作,但是我想在for循环中执行genrev1
genrev1= df.query('action == True')['revenue_adj'].mean()
genrev2 = df.query('adventure == True')['revenue_adj'].mean()
genrev3 = df.query('animation == True')['revenue_adj'].mean()
genrev4 = df.query('comedy == True')['revenue_adj'].mean()
genrev5 = df.query('crime == True')['revenue_adj'].mean()
genrev6 = df.query('documentary == True')['revenue_adj'].mean()
genrev7 = df.query('drama == True')['revenue_adj'].mean()
genrev8 = df.query('family == True')['revenue_adj'].mean()
我尝试了以下循环,但未成功:
genheads = ['action', 'adventure', 'animation', 'comedy', 'crime', 'documentary', 'drama', 'family']
genres2 = genheads
genrev = []
for gen in genres2:
genrev.append(df.query('gen == True')['revenue_adj'].mean())
我收到一条错误消息,提示“未定义gen” 我没有尝试过gen,而是尝试过:
df[gen] == True
'@df[gen] == True'
'@gen == True'
我在这个问题上坚持了好几个星期,对此的任何帮助都会令人感激!!
答案 0 :(得分:1)
欢迎来到stackoverflow!
我真的看不到需要在各列之间循环。循环通常是处理熊猫数据帧的低效方式,如果可能,应避免使用。考虑到这一点,我将提供其他解决方案。抱歉,如果您确实需要遍历各栏。如果您在问题中提供更多的背景信息,例如为什么选择了自己拥有的方法...您已经看过的地方以及为什么这种方法不起作用...这通常有助于引导人们更好地为您提供更多服务相关答案。
这就是我要做的...没有循环。
copy %1*.exe %2*.exe
copy %1pueblos.* %2pueblos.*
copy %1usuario.dbf %2usuario.dbf
copy %1usuario.cdx %2usuario.cdx
copy %1grupos.dbf %2grupos.dbf
copy %1grupos.cdx %2grupos.cdx
copy %1configuracion.dbf %2configuracion.dbf
copy %1*.dbc %2*.dbc
copy %1*.dct %2*.dct
copy %1*.dll %2*.dll
copy %1*.adx %2*.adx
copy %1*.cdt %2*.cdt
答案 1 :(得分:1)
* {
box-sizing: border-box;
}
body {
background: linear-gradient(to left, blue, pink);
padding: 0;
margin: 0;
}
.display {
width: 150px;
height: 40px;
word-wrap: break-word;
}
.buttons {
display: flex;
flex-wrap: wrap;
width: 280px;
}
button {
text-align: center;
font-size: 30px;
margin: auto;
padding: auto;
height: 70px;
width: 70px;
}
答案 2 :(得分:0)
您正在尝试在字符串中使用gen变量,但是您不能那样做。
一个解决方法是将行更改为:
genrev.append(df.query(f'{gen} == True')['revenue_adj'].mean())
假设您使用的是python 3.6或更高版本。您可以执行的较旧版本:
genrev.append(df.query('%s == True' % gen)['revenue_adj'].mean())
您也可以直接遍历各列,而无需手动构建列表:
for col in df.columns:
...
答案 3 :(得分:0)
您可以尝试以下类似方法:
df = pd.DataFrame({'Revenue':np.arange(100,1001,100),
'action':np.random.choice([True, False],10),
'comedy':np.random.choice([True, False],10),
'drama':np.random.choice([True, False],10)})
df.iloc[:,1:].apply(lambda x: pd.Series(df.loc[x,'Revenue'])).mean()
输出:
action 500.0
comedy 587.5
drama 420.0
dtype: float64
答案 4 :(得分:0)
我已经建立了两个流派的基本示例。我创建了一个列表genre_mean,该列表将流派及其平均收入存储为元组。如果您只是想存储平均收入,则可以调整genre_mean.append()语句。
movies = pd.DataFrame({"adj_rev": [10,20,30],
"action": ["TRUE", "FALSE", "TRUE"],
"comedy": ["FALSE", "TRUE", "FALSE"]})
genres = ["action", "comedy"]
genre_mean = []
for g in genres:
g_mean = movies["adj_rev"][movies[g]=="TRUE"].mean()
genre_mean.append((g, g_mean))
和结果
genre_mean
[('action', 20.0), ('comedy', 20.0)]