在日期和名称的多行上组合数据框中的值
Combine values in dataframe on multiple rows on date and name
我有一个数据框数据集,我想在其中合并一些数据。目前我已经尝试使用 .groupby()
和 .sum()
但我得到的结果不是我所期望的。
我的数据集 atm 如下所示:
date
value
name
2022-01-19
27
podcast_processed
2022-01-19
25
podcast_processed
2022-01-19
23
podcast_processed
2022-01-19
23
podcast_processed
2022-01-19
23
n_known_errors
2022-01-19
23
n_known_errors
2022-01-19
23
n_known_errors
2022-01-19
23
n_known_errors
2022-01-19
0
n_unknown_errors
2022-01-19
0
n_unknown_errors
2022-01-19
2
n_unknown_errors
2022-01-19
0
n_unknown_errors
Image of dataset
我想要实现的是合并不同名称的值。如何做到这一点?
因此数据将是(以适当的数据帧格式):
date
value
name
2022-01-19
98
podcast_processed
2022-01-19
69
n_known_errors
2022-01-19
2
n_unknown_errors
我的代码:
from xxx.input import get_automation_metrics
def graph_visual_data(script_title):
data = get_automation_metrics(script_title)
data = data[data.name.isin(['podcast_processed', 'n_unknown_errors', 'n_known_errors'])][['date','value','name']]
data.date = data.date.dt.date
data.value = data.value.astype(int)
data = data.groupby(['name','date'])['value'].sum()
fig = alt.Chart(data).mark_bar(size=10).encode(
x='date',
y='value',
color='name',
tooltip=['name', 'value']
).interactive()
st.altair_chart(fig, use_container_width=True)
如果可能的话,我需要从 podcast_processed
的总和中减去 n_unknown_errors
和 n_known_errors
的组合值。所以数据看起来像(以适当的数据帧格式):
date
value
name
2022-01-19
27
podcast_processed
2022-01-19
69
n_known_errors
2022-01-19
2
n_unknown_errors
默认情况下,groupby 上的聚合将分组列放入索引中,它们不再是普通 列。
您可以通过 reset_index
:
修复它
data = data.groupby(['date', 'name']).sum().reset_index()
或用as_index=False
阻止它:
data = data.groupby(['date', 'name'], as_index=False).sum()
两种方式都会得到:
date name value
0 2022-01-19 n_known_errors 92
1 2022-01-19 n_unknown_errors 2
2 2022-01-19 podcast_processed 98
我有一个数据框数据集,我想在其中合并一些数据。目前我已经尝试使用 .groupby()
和 .sum()
但我得到的结果不是我所期望的。
我的数据集 atm 如下所示:
date | value | name |
---|---|---|
2022-01-19 | 27 | podcast_processed |
2022-01-19 | 25 | podcast_processed |
2022-01-19 | 23 | podcast_processed |
2022-01-19 | 23 | podcast_processed |
2022-01-19 | 23 | n_known_errors |
2022-01-19 | 23 | n_known_errors |
2022-01-19 | 23 | n_known_errors |
2022-01-19 | 23 | n_known_errors |
2022-01-19 | 0 | n_unknown_errors |
2022-01-19 | 0 | n_unknown_errors |
2022-01-19 | 2 | n_unknown_errors |
2022-01-19 | 0 | n_unknown_errors |
Image of dataset
我想要实现的是合并不同名称的值。如何做到这一点?
因此数据将是(以适当的数据帧格式):
date | value | name |
---|---|---|
2022-01-19 | 98 | podcast_processed |
2022-01-19 | 69 | n_known_errors |
2022-01-19 | 2 | n_unknown_errors |
我的代码:
from xxx.input import get_automation_metrics
def graph_visual_data(script_title):
data = get_automation_metrics(script_title)
data = data[data.name.isin(['podcast_processed', 'n_unknown_errors', 'n_known_errors'])][['date','value','name']]
data.date = data.date.dt.date
data.value = data.value.astype(int)
data = data.groupby(['name','date'])['value'].sum()
fig = alt.Chart(data).mark_bar(size=10).encode(
x='date',
y='value',
color='name',
tooltip=['name', 'value']
).interactive()
st.altair_chart(fig, use_container_width=True)
如果可能的话,我需要从 podcast_processed
的总和中减去 n_unknown_errors
和 n_known_errors
的组合值。所以数据看起来像(以适当的数据帧格式):
date | value | name |
---|---|---|
2022-01-19 | 27 | podcast_processed |
2022-01-19 | 69 | n_known_errors |
2022-01-19 | 2 | n_unknown_errors |
默认情况下,groupby 上的聚合将分组列放入索引中,它们不再是普通 列。
您可以通过 reset_index
:
data = data.groupby(['date', 'name']).sum().reset_index()
或用as_index=False
阻止它:
data = data.groupby(['date', 'name'], as_index=False).sum()
两种方式都会得到:
date name value
0 2022-01-19 n_known_errors 92
1 2022-01-19 n_unknown_errors 2
2 2022-01-19 podcast_processed 98