我有一个表明日期和时间的数据集。时间采用5位数格式:ddd + hm
ddd部分从2009年1月1日开始。由于数据仅从那时收集到2年,因此[min,max]将是[1,365 x 2 = 730]。
在30分钟的间隔内观察数据,每天24小时,最长时间延长至48小时。所以[min,max]为hm,[1,48]。
以下是daycode.csv文件的摘录,其中包含日期代码的ddd部分,匹配日期& hm部分日期代码,匹配时间。
我认为我同意不显示来自ISSDA的数据集。那么......我只会描述File1.txt文件中的日期代码如“' 63317'”。
This link让我瞥见了如何处理这个问题,我正在将这些代码放在一起......当然,这当然不会起作用。
consume = pd.read_csv("data/File1.txt", sep= ' ', encoding = "utf-8", names =['meter', 'daycode', 'val'])
df1= pd.read_csv("data/daycode.csv", encoding = "cp1252", names =['code', 'print'])
test = consume[consume['meter']==1048]
test['daycode'] = test['daycode'].map(df1.set_index('code')['print'])
plt.plot(test['daycode'], test['val'], '.')
plt.title('test of meter 1048')
plt.xlabel('daycode')
plt.ylabel('energy consumption [kWh]')
plt.show()
并非所有单位(数千)都在全长观察,但730 x 48是一个很大的组合,可以手工制作excel。 Tbh,不是一个优雅的解决方案,但我尝试拖动 - 它并没有得到它。
如果我可以读取列值的前3位数字并与另一个文件的列匹配,则使用另一列的2个最后数字,然后组合..有没有办法?
答案 0 :(得分:1)
对于最后两行你可以做这样的事情
df['first_3_digits'] = df['col1'].map(lambda x: str(x)[:3])
df['last_2_digits'] = df['col1'].map(lambda x: str(x)[-2:])
for joining 2 dataframes
df3 = df.merge(df2,left_on=['first_3_digits','last_2_digits'],right_on=['col1_df2','col2_df2'],how='left')