在范围间隔中映射不同的值

时间:2018-05-29 10:44:27

标签: python pandas pandas-map

我有以下数据框:

df_data = pd.DataFrame({'Time_0': [5, 5, 5],
                        'Time_1': [8, 10, 12],
                        'Values': [10.0, 15.0, 20.0]})

我需要在Valuestime_0间隔内的每一行中将time_1分发到新的现金流量数据框中。我目前将它映射到一行:

df_CF = pd.DataFrame({'Values': [0.0 for n in (range(0, 16))],
                      'Months': range(0, 16)})
df_CF['Values'] = df_CF['Months'].map(df_data.set_index('Time_1')['Values']).fillna(value=0)

但是,我不太确定如何将其扩展到整个范围。输出应为:

**Time   Values**
0        0
1        0
2        0
3        0
4        0
5        45
6        45
7        45
8        45
9        35
10       35
11       20
12       20
13       0
14       0
15       0
16       0

1 个答案:

答案 0 :(得分:0)

关注您的修改:

df_data = pd.DataFrame({'Time_0':[5,5,5]
               ,'Time_1':[8,10,12]
               ,'Values':[10.0,15.0,20.0]})

df_dict={"Range": [k for k in range(20)],
    "CF": [0 for k in range(20)]}

for j in range(len(df_dict["Range"])):
    for z in range(len(df_data)):
        if df_data['Time_0'].iloc[z]<=df_dict['Range'][j] and df_data['Time_1'].iloc[z]>=df_dict['Range'][j]:
            df_dict['CF'][j]=df_dict['CF'][j]+df_data['Values'].iloc[z]

输出:

    CF
0   0.0
1   0.0
2   0.0
3   0.0
4   0.0
5   45.0
6   45.0
7   45.0
8   45.0
9   35.0
10  35.0
11  20.0
12  20.0
13  0.0
14  0.0
15  0.0
16  0.0
17  0.0
18  0.0
19  0.0

我相信确实存在更优雅的解决方案。