Python 在计算其他列表的平均值时,不能删除列表为空的行
我有一个时间序列df,它有两列。我试图从“年度成本”列中删除所有空列表,同时对包含浮动的列表进行平均,为每一天创建一个单一值。“日期”列中的同一日期有多个值,因此我尝试根据该日期合并所有行。df看起来是这样的:Python 在计算其他列表的平均值时,不能删除列表为空的行,python,pandas,time-series,Python,Pandas,Time Series,我有一个时间序列df,它有两列。我试图从“年度成本”列中删除所有空列表,同时对包含浮动的列表进行平均,为每一天创建一个单一值。“日期”列中的同一日期有多个值,因此我尝试根据该日期合并所有行。df看起来是这样的: date yearly_cost 0 2009-01-01 [] 1 2009-01-02 [409.45,294.33,394.56] 2 2009-01-03 [403.45,175.30,323.67] 3 2009-01-01 [45
date yearly_cost
0 2009-01-01 []
1 2009-01-02 [409.45,294.33,394.56]
2 2009-01-03 [403.45,175.30,323.67]
3 2009-01-01 [456.34,355.3,493.5]
4 2009-01-02 []
5 2009-01-03 [295.39, 439.23]
有些日子会有多个列表,因此我需要对两个列表进行平均,以创建单个值
我已尝试使用.dropna、np.nanmean和average将列表与ts.year_cost=[np.meani如果是instancei,则在ts.year_cost中为I列出else I,并按日期连接
使用.set_index'date'.meanaxis=1.reset_indexname='year_Cost',它过去在没有空列表的情况下对时间序列有效
我希望最终结果是这样的:
date yearly_cost
0 2009-01-01 435.05
1 2009-01-02 366.11
2 2009-01-03 327.408
在此方面的任何帮助都将不胜感激。谢谢如果在“年度成本”列中有列表,请首先将其展平,然后汇总平均值: 另一个解决方案:
s = pd.DataFrame(df['yearly_cost'].values.tolist(), index=df['date']).stack()
df = s.mean(level=0).reset_index(name='yearly_cost')
print (df)
date yearly_cost
0 2009-01-02 366.113333
1 2009-01-03 327.408000
2 2009-01-01 435.046667
如果在“年度成本”列中有列表,则首先将其展平,然后汇总平均值: 另一个解决方案:
s = pd.DataFrame(df['yearly_cost'].values.tolist(), index=df['date']).stack()
df = s.mean(level=0).reset_index(name='yearly_cost')
print (df)
date yearly_cost
0 2009-01-02 366.113333
1 2009-01-03 327.408000
2 2009-01-01 435.046667
IIUC
通过将类型转换为bool来删除空列表
df=df[df.yearly_cost.astype(bool)].copy()
删除空列表后,可以执行groupby
IIUC
通过将类型转换为bool来删除空列表
df=df[df.yearly_cost.astype(bool)].copy()
删除空列表后,可以执行groupby
groupby.sum和np.mean
总和将连接列表
df.groupby('date').yearly_cost.sum().apply(np.mean)
date
2009-01-01 435.046667
2009-01-02 366.113333
2009-01-03 327.408000
Name: yearly_cost, dtype: float64
如果这些是字符串
from ast import literal_eval
df.yearly_cost.apply(literal_eval).groupby(df.date).sum().apply(np.mean)
中高音
因式分解
groupby.sum和np.mean
总和将连接列表
df.groupby('date').yearly_cost.sum().apply(np.mean)
date
2009-01-01 435.046667
2009-01-02 366.113333
2009-01-03 327.408000
Name: yearly_cost, dtype: float64
如果这些是字符串
from ast import literal_eval
df.yearly_cost.apply(literal_eval).groupby(df.date).sum().apply(np.mean)
中高音
因式分解
两个问题:为什么你的年度成本与天数有关?为什么要将列表存储在数据框元素中?dataframe在每一行/每一列中使用标量的效果要好得多两个问题:为什么您的年度成本与天数相关?为什么要将列表存储在数据框元素中?dataframe在每行/每列使用标量时工作得更好我在第一步TypeError中收到以下错误:无法使用flexible TypeError执行reduce另一个问题是第三个日期的平均值是两个之和,而不是一整天的平均值。@geds133-是,因此,已更改的解决方案我刚刚收到MemoryError:@geds133您的数据有多大?我在第一步中收到以下错误类型错误:无法使用灵活类型执行reduce。另一个问题是,第三个日期是两个平均值之和,而不是一整天的一个平均值。@geds133-是,因此,已更改的解决方案我刚刚收到MemoryError:@geds133您的数据有多大?收到与上述类型相同的错误错误:无法使用flexible执行reducetype@geds133您需要让我们知道“年度成本”列是字符串还是列表。@piRSquared空列表和带有浮点数的列表接收与上述TypeError相同的错误:cannot灵活执行reducetype@geds133您需要让我们知道“年度成本”列是字符串还是列表。@piRSquared Empty List和List with float inI发言过快,时间序列中似乎仍有空列表,因为当我尝试创建移动平均值时,我得到了以下错误值error:无法将字符串转换为float:'[]“@geds133当我浮动“[]”时,我就知道了,这意味着数据中有字符串,这与您所声称的相反。这意味着你有坏数据,需要清理它。一些用户建议进行文字评估。在使用其中一种技术之前,请尝试执行此df['year_cost']=df['year_cost']]。astypestr.applyliteral_eval。确保从ast导入文字_evalIs可以将空列表计为字符串吗?返回的df是一个以日期为索引的序列,没有年度成本。我说得太早了,时间序列中似乎仍然有空列表,因为当我尝试创建移动平均值时,我得到了这个错误值error:无法将字符串转换为浮点:'[]@geds133我在做浮点时得到了它'[]'这意味着数据中的字符串与您所声称的相反。这意味着你有坏数据,需要清理它。一些用户建议进行文字评估。在使用其中一种技术之前,请尝试执行此df['year_cost']=df['year_cost']]。astypestr.applyliteral_eval。确保从ast导入文字_evalIs可以将空列表计为字符串吗?返回的df是一个以日期为索引的系列,没有年度成本。