【发布时间】:2018-10-01 15:57:03
【问题描述】:
我有一个数据框,其中包含一系列日期和相应的值。我有另一个包含三列(mindate、maxdate、value)的数据框。我想使用 second 数据帧 mindate 和 maxdate 遍历 first 数据帧的每一行。然后,我想将每个 Value 乘以新 range df 中的 CustomerUsage 并返回总和。
>>df1 Date Value
0 2012-04-01 0.00275
1 2012-04-02 0.00278
2 2012-04-03 0.00369
3 2012-04-04 0.00268
4 2012-04-05 0.00400
>>df2 Start End CustomerUsage
1 2012-04-01 2012-04-03 464.0
2 2012-04-04 2012-04-04 472.1
>> for row in df2.iterrows():
mindate = row[row.index[0],'Start']
maxdate = row[row.index[0],'End']
range = df1[(df1['Dates'] >= mindate) & (df1['Dates'] <= maxdate)]
range['Calc'] = range['Value']*df2['CustomerUsage']
##numpy .agg function here##
单行可以工作,但我一直在迭代日期,AttributeError: 'str' object has no attribute 'loc' 的错误(我认为我错误地对待这些元组,但不确定补救措施的人!)
非常感谢!
【问题讨论】:
-
你可以修复你的数据吗,结束日期早于开始
-
谢谢,已修复!尝试将 customerusage 乘以 df1 日期范围内的每个值。
-
您最后未注释的行不应该是:range['Calc'] = range['Value']*row['CustomerUsage']
-
@Wen 很好,我正在尝试进行类似的合并,但是对于 df2 的每一行,最终引用的 numpy .agg 函数会创建一个新列。我相信我的挂断是在头脑中的,一旦它们被引入 for 循环(错误地处理单个元组?)我正在使用的实际 df2 有数十万行用于各种不同日期范围的客户使用情况。
标签: python pandas dataframe merge