【发布时间】:2023-03-22 16:09:01
【问题描述】:
我正在尝试使用 pandas 绘制体积/天与天数,但我的解决方案输出的值不超过第一个值(CumTime[0],R[0])。下面是初始表的外观示例,伴随它的是我想要获得的输出/结果。任何建议/帮助将不胜感激。谢谢
表:
<table style="width:50%">
<tr>
<th>ID</th>
<th>Date</th>
<th>Days</th>
<th>Volume/Day</th>
</tr>
<tr>
<td>a2</td>
<td>01/01/2014</td>
<td>20</td>
<td>60</td>
</tr>
<tr>
<td>a1</td>
<td>01/01/2014</td>
<td>15</td>
<td>100</td>
</tr>
<tr>
<td>a1</td>
<td>02/01/2014</td>
<td>30</td>
<td>80</td>
</tr>
<tr>
<td>a2</td>
<td>02/01/2014</td>
<td>20</td>
<td>40</td>
</tr>
</table>
尝试过的解决方案:
df_grp=df.groupby('ID')
for key, grp in df_grp:
def final_result(all_data):
for key, grp in all_data:
grp.set_index('Date',inplace=True)
CumTime = grp['Days'].cumsum()
R = grp['Volume/Day']
return CumTime,R
CumTime,R = final_result(df_grp)
预期结果:
<table style="width:50%">
<tr>
<th>ID</th>
<th>Date</th>
<th>Days(***Cumulative_days)</th>
<th>Volume/Day</th>
</tr>
<tr>
<td>a1</td>
<td>01/01/2014</td>
<td>15</td>
<td>100</td>
</tr>
<tr>
<td>a1</td>
<td>02/01/2014</td>
<td>45</td>
<td>80</td>
</tr>
<tr>
<th>ID</th>
<th>Date</th>
<th>Days(***Cumulative_days)</th>
<th>Volume/Day</th>
</tr>
<tr>
<td>a2</td>
<td>01/01/2014</td>
<td>65</td>
<td>60</td>
</tr>
<tr>
<td>a2</td>
<td>02/01/2014</td>
<td>85</td>
<td>40</td>
</tr>
</table>
【问题讨论】:
-
您提供的数据具有唯一 ID。 groupby 在这里有什么用?
-
@COLDSPEED,刚刚更新了表格。每个 ID 在同一月份的时间范围内都有它的值。这有助于回答您的问题吗?
-
如果我理解正确,请告诉我。
-
@COLDSPEED,根据我之前设置表格的方式,您对我的理解是正确的。抱歉,我一直在更改结果的外观。我希望下面的解决方案按 ID 分组并按日期编入索引。我刚刚更新了我希望表格看起来像上面的样子。你能帮忙吗?谢谢
-
原来如此,但是你想根据id来分离结果?
标签: python pandas matplotlib dataframe