如果另一列中的字符串匹配,则取列值的平均值

时间:2019-09-18 08:17:57

标签: python pandas

我有一个由文件名列表组成的文件,它们具有相应的时间戳,第三个值是“ S”值。

例如:

                            col1             col2       col3
hd75332_01dec15_int_Normal_001.s    2457358.61880    0.25426
hd75332_01dec15_int_Normal_002.s    2457358.62334    0.25590
hd75332_01dec15_int_Normal_003.s    2457358.62780    0.25178
hd75332_01dec15_int_Normal_004.s    2457358.63226    0.25287
hd75332_01feb07_int_Normal_001.s    2454133.55246    0.27092
hd75332_01feb07_int_Normal_002.s    2454133.55653    0.26926
hd75332_01feb07_int_Normal_003.s    2454133.56059    0.27149
hd75332_01feb07_int_Normal_004.s    2454133.56467    0.26733
hd75332_01nov17_int_Normal_001.s    2458059.56671    0.28945
hd75332_01nov17_int_Normal_002.s    2458059.57084    0.28566
hd75332_01nov17_int_Normal_003.s    2458059.57507    0.28170
hd75332_01nov17_int_Normal_004.s    2458059.57929    0.28075

有4个文件的序列,其中文件名完全相同,除了001、002、003和004。对于每组4个相似的文件名,我想取时间戳的平均值和平均值“ S”值。我想用文件名(减去001、002、003或004),平均时间戳和平均S值生成一个新文件。

这是我尝试过的:

inputs = pd.read_csv("LombScarInput.dat", header=None, delimiter=r"\s+", skiprows=1, names=["spectrafile", "HJD", "S"], dtype={"HJD":"float", "S":"float"})
S = inputs.S.values
HJD = inputs.HJD.values
spectrafile = inputs.spectrafile.values
data1 = df.groupby(df[spectrafile].str.rsplit('_', n=1).str[0]).mean().reset_index()

我收到错误消息TypeError:对象不可下标

1 个答案:

答案 0 :(得分:0)

您可以从右侧以Series.str.rsplit从最后_处进行拆分,并以[0]来选择第一个列表,然后以聚合groupby传递到mean

df1 = df.groupby(df['col1'].str.rsplit('_', n=1).str[0]).mean().reset_index()

或者如果可能的话,使用切片从文件名的后6个值中删除:

df1 = df.groupby(df['col1'].str[:-6]).mean().reset_index()

print (df1)
                         col1          col2      col3
0  hd75332_01dec15_int_Normal  2.457359e+06  0.253702
1  hd75332_01feb07_int_Normal  2.454134e+06  0.269750
2  hd75332_01nov17_int_Normal  2.458060e+06  0.284390

详细信息

print (df['col1'].str.rsplit('_', n=1).str[0])
0     hd75332_01dec15_int_Normal
1     hd75332_01dec15_int_Normal
2     hd75332_01dec15_int_Normal
3     hd75332_01dec15_int_Normal
4     hd75332_01feb07_int_Normal
5     hd75332_01feb07_int_Normal
6     hd75332_01feb07_int_Normal
7     hd75332_01feb07_int_Normal
8     hd75332_01nov17_int_Normal
9     hd75332_01nov17_int_Normal
10    hd75332_01nov17_int_Normal
11    hd75332_01nov17_int_Normal
Name: col1, dtype: object
相关问题