【问题标题】:Mapping column values to a combination of another csv file's information将列值映射到另一个 csv 文件信息的组合
【发布时间】:2018-08-02 23:53:11
【问题描述】:

我有一个以 5 位格式表示日期和时间的数据集:ddd + hm

ddd 部分从 2009 年 1 月 1 日开始。由于仅收集了从那时到 2 年的数据,因此其 [min, max] 将为 [1, 365 x 2 = 730]。

以 30 分钟的间隔观察数据,使每天 24 小时的时间延长至最多 48 小时。所以 [min, max] 表示 [1, 48] 处的 hm。

以下是 daycode.csv 文件的摘录,其中包含日期代码的 ddd 部分、匹配日期和日期代码的 hm 部分、匹配时间。

我想我同意不显示来自 ISSDA 的数据集。所以..我将描述 File1.txt 文件中的 daycode 读起来像“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 个数字与另一列匹配,那么结合..有没有办法?

【问题讨论】:

标签: pandas csv dataframe plot replace


【解决方案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')

【讨论】:

    猜你喜欢
    • 2014-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 2022-10-14
    相关资源
    最近更新 更多