找到满足条件的单元的均值

时间:2019-10-30 16:16:02

标签: python pandas dataframe

我们具有格式为“ aa-bb-cccccccc/yyyy/xx@ddddddddd.ee”的单元格,其中xx是格式(A0-Z9)的标题,而yyyy是格式(0001-9999)的数字。我们想要找到xx ='X1'的单元格的yyyy平均值。该表很大,因此遍历每个单元似乎有问题。我可以在这里使用某种方式的函数filter(like ='X1')吗,在满足此条件的情况下我很难找到一种提取yyyy的方法。

import pandas as pd
df = pd.read_csv("dane.csv", sep=';')
shape = list(df.shape)
for i in range(0,shape[1]):
    if df.iloc[:,i].filter(like='X1')

输入示例,第一行是列名。

1: Brandenburg (Post-Panamax)               2: Acheron (Feeder)                        
ES-NL-10633096/1938/X1@hkzydbezon.dk/6749   DE-JP-20438082/2066/A2@qwinfhcaer.cu/68849
BE-BR-61613986/3551/B1@oqk.bf/39927         NL-LK-02275406/2136/A1@ozmmfdpfts.de/73198
PH-SA-39552610/2436/A1@venagi.hr/80578
PA-AE-59814691/4881/X1@zhicvzvksl.cl/25247  OM-PH-31303222/3671/Z1@jtqy.ml/52408

1 个答案:

答案 0 :(得分:1)

据我了解,您想为所有单元格计算一个平均值 符合条件,无论其在何处。

import re 开始。

然后编译正则表达式:

pat = re.compile(r'(?:[A-Z]{2}-){2}\d+/(?P<n>\d+)/X1@[A-Z]+\.[A-Z]{2}',
    flags=re.I)

结果可以用以下一线计算:

pd.Series(df.values.reshape(-1, 1).squeeze()).str.extract(pat)\
    .dropna().astype(int).n.mean()

对于您的样本数据,结果为 3409.5

要熟悉计算方式,请执行每个步骤 作为单独的说明,并观察结果。