Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否有一种更简洁的方法可以根据字符串中的特定子字符串获取多个变量的平均值_Python_Pandas_For Loop - Fatal编程技术网

Python 是否有一种更简洁的方法可以根据字符串中的特定子字符串获取多个变量的平均值

Python 是否有一种更简洁的方法可以根据字符串中的特定子字符串获取多个变量的平均值,python,pandas,for-loop,Python,Pandas,For Loop,我有与一个名称相关的变量,我想根据它的主名取其平均值。注意,与下面的示例相反,我有两个以上的主名,而且所有这些都看起来很混乱。所以我想知道是否有人能让这更简洁? 提前谢谢 fullname = ['MainName1,subname1','MainName1,subname2','MainName2,subname1','MainName2,subname2'] var1 = [1,5,9,4] var2 = [2,6,1,5] var3 = [3,7,2,6] var4 = [4,8,3,7]

我有与一个名称相关的变量,我想根据它的主名取其平均值。注意,与下面的示例相反,我有两个以上的主名,而且所有这些都看起来很混乱。所以我想知道是否有人能让这更简洁? 提前谢谢

fullname = ['MainName1,subname1','MainName1,subname2','MainName2,subname1','MainName2,subname2']
var1 = [1,5,9,4]
var2 = [2,6,1,5]
var3 = [3,7,2,6]
var4 = [4,8,3,7]

    vars = pd.DataFrame(np.column_stack([fullname,var1,var2,var3,var4]))
    vars = vars.set_index('fullname')

    meanvars = [(allvars[allvars.index.str.contains('MainName1')]).mean(),
                (allvars[allvars.index.str.contains('MainName2')]).mean()]
    MainName = ['MainName1','MainName2']

    Final = pd.DataFrame(np.column_stack([MainName,meanvars]))
对于正则表达式
或通过聚合
mean
传递到
groupby
,您可以使用从列表中获取具有已联接子字符串的子字符串:

fullname = ['MainName1,subname1','MainName1,subname2',
            'MainName2,subname1','MainName2,subname2']
var1 = [1,5,9,4]
var2 = [2,6,1,5]
var3 = [3,7,2,6]
var4 = [4,8,3,7]

df = pd.DataFrame(np.column_stack([var1,var2,var3,var4]), index=fullname)
print (df)
                    0  1  2  3
MainName1,subname1  1  2  3  4
MainName1,subname2  5  6  7  8
MainName2,subname1  9  1  2  3
MainName2,subname2  4  5  6  7

L = ['MainName1','MainName2']
idx = df.index.str.extract('('+ '|'.join(L) + ')', expand=False)
print (idx)
Index(['MainName1', 'MainName1', 'MainName2', 'MainName2'], dtype='object')

df = df.groupby(idx).mean()
print (df)
             0    1    2    3
MainName1  3.0  4.0  5.0  6.0
MainName2  6.5  3.0  4.0  5.0

您能否提供一个数据帧的示例?它能像
allvars.groupby('names').mean()那样简单吗?对不起,我没意识到我的问题太复杂了。我已经编辑过了,谢谢@瓦伦达莱索里亚诺-我的解决方案怎么样?这太棒了!干杯