在Python中循环遍历数据帧
我有一个数据框,如下所示:在Python中循环遍历数据帧,python,pandas,Python,Pandas,我有一个数据框,如下所示: c1 c2 c3 c4 c5 c6 c7 0 li 1 2 1 3 2 4 1 qian 2 3 3 5 4 2 2 qian 3 5 4 3 2 4 3 li 5 23 23 2 5 2 4 li 2 5 1 4 2 4 5 zhou 3 5 1 1 1
c1 c2 c3 c4 c5 c6 c7
0 li 1 2 1 3 2 4
1 qian 2 3 3 5 4 2
2 qian 3 5 4 3 2 4
3 li 5 23 23 2 5 2
4 li 2 5 1 4 2 4
5 zhou 3 5 1 1 1 2
我试图创建一个新的列c8,它返回分组平均值。分组方法为:
groupby('c1')['c2'].transform('mean') ---c2 can be replaced by c3 to c7
我当前的代码如下所示:
lst = [c1, c2, c3, c4,c5, c6, c7]
for i in range(len(lst)):
res = df.groupby(df['c1'])[i].transform('mean')
return res
df['c8'] = df[res]
错误表示找不到c1。谁能告诉我如何生成分组平均值并使此循环工作?这里有几个问题:
lst
。这些应该是字符串(用引号括起来)
lst
的索引,而不是lst
本身的项-例如,对于for循环的每次迭代,您的迭代器i
是1
然后2
然后3
,而不是“c1”
for循环
中有一个return
语句。几乎没有理由在for循环中放入return语句,因为它会完全停止循环
res
变量中
lst = ["c2", "c3", "c4", "c5", "c6", "c7"]
for column in lst:
df[column] = df.groupby("c1")[column].transform('mean')
print(df)
c1 c2 c3 c4 c5 c6 c7
0 li 2.666667 10 8.333333 3 3 3.333333
1 qian 2.500000 4 3.500000 4 3 3.000000
2 qian 2.500000 4 3.500000 4 3 3.000000
3 li 2.666667 10 8.333333 3 3 3.333333
4 li 2.666667 10 8.333333 3 3 3.333333
5 zhou 3.000000 5 1.000000 1 1 2.000000
但更好的是,您可以一次提供所有要计算平均值的列,而无需显式循环:
lst = ["c2", "c3", "c4", "c5", "c6", "c7"]
average_df = df.groupby("c1")[lst].transform("mean")
print(average_df)
c2 c3 c4 c5 c6 c7
0 2.666667 10.0 8.333333 3.0 3.0 3.333333
1 2.500000 4.0 3.500000 4.0 3.0 3.000000
2 2.500000 4.0 3.500000 4.0 3.0 3.000000
3 2.666667 10.0 8.333333 3.0 3.0 3.333333
4 2.666667 10.0 8.333333 3.0 3.0 3.333333
5 3.000000 5.0 1.000000 1.0 1.0 2.000000
请显示预期输出