我有一个由文件名列表组成的文件,它们具有相应的时间戳,第三个值是“ 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:对象不可下标
答案 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