Python 在计算其他列表的平均值时,不能删除列表为空的行

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

我有一个时间序列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  [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是一个以日期为索引的系列,没有年度成本。