Pandas DataFrame GroupBy 和基于分组数据子集的新计算列
Pandas DataFrame GroupBy and New Calculated Columns Based on subsets of grouped data
我是 pandas 的初学者,选择它是因为根据评论它似乎最受欢迎且最容易使用。我的意图是使用异步进程进行快速数据处理(pandas 并不真正支持异步,但还没有解决这个问题)。如果您认为我可以根据以下情况使用更好的库来满足我的需求,请告诉我。
我的代码是 运行 使用 asyncio 的 websockets,它不断获取 activity 数据并将其存储到 pandas DataFrame 中,如下所示:
data_set.loc[len(data_set)] = [datetime.now(),res['data']['E'] ,res['data']['s'] ,res['data']['p'] ,res['data']['q'] ,res['data']['m']]
这似乎在打印结果时起作用。数据框变大很快,所以有清理函数检查数据框的 len() 和 drop() 行。
我的目的是获取 data_set 中的完整数据集并基于组值创建摘要视图,并使用分组数据和不同 date_time 快照中的数据点计算附加值作为分析.这些计算每秒 运行 次。
我的意思是这个(所有内容都是编造的,而不是工作代码示例只是所需内容的原理):
grouped_data = data_set.groupby('name')
stats_data['name'] = grouped_data['name'].drop_duplicates()
stats_data['latest'] = grouped_data['column_name'].tail(1)
stats_data['change_over_1_day'] = ? (need to get oldest record that's within 1 day frame (out of multiple day data), and get value from specific column and compare it against ['latest']
stats_data['change_over_2_day'] = ?
stats_data['change_over_3_day'] = ?
stats_data['total_over_1_day'] = grouped_data.filter(data > 1 day ago).sum(column_name)
我用谷歌搜索了一百万个东西,每次的例子都很基础,对我的场景没有真正帮助。
感谢任何帮助。
我猜这个问题有点含糊,但经过更多研究(谷歌搜索)和 trial/error(小时)设法完成我在这里提到的所有内容。
希望可以帮助新手节省一些时间:
stats_data = data.loc[trade_data.groupby('name')['date_time'].idxmax()].reset_index(drop=True)
1_day_ago = data.loc[data[data.date_time > day_1].groupby("name")["date_time"].idxmin()].drop(labels = ['date_time','id','volume','flag'], axis=1).set_index('name')['value']
stats_data['change_over_1_day'] = stats_data['value'].astype('float') / stats_data['name'].map(1_day_ago).astype('float') * 100 - 100
相同的原则适用于其他列。
如果有人有更多 efficient/faster 方法来做到这一点,请 post 你的答案。
我是 pandas 的初学者,选择它是因为根据评论它似乎最受欢迎且最容易使用。我的意图是使用异步进程进行快速数据处理(pandas 并不真正支持异步,但还没有解决这个问题)。如果您认为我可以根据以下情况使用更好的库来满足我的需求,请告诉我。
我的代码是 运行 使用 asyncio 的 websockets,它不断获取 activity 数据并将其存储到 pandas DataFrame 中,如下所示:
data_set.loc[len(data_set)] = [datetime.now(),res['data']['E'] ,res['data']['s'] ,res['data']['p'] ,res['data']['q'] ,res['data']['m']]
这似乎在打印结果时起作用。数据框变大很快,所以有清理函数检查数据框的 len() 和 drop() 行。
我的目的是获取 data_set 中的完整数据集并基于组值创建摘要视图,并使用分组数据和不同 date_time 快照中的数据点计算附加值作为分析.这些计算每秒 运行 次。 我的意思是这个(所有内容都是编造的,而不是工作代码示例只是所需内容的原理):
grouped_data = data_set.groupby('name')
stats_data['name'] = grouped_data['name'].drop_duplicates()
stats_data['latest'] = grouped_data['column_name'].tail(1)
stats_data['change_over_1_day'] = ? (need to get oldest record that's within 1 day frame (out of multiple day data), and get value from specific column and compare it against ['latest']
stats_data['change_over_2_day'] = ?
stats_data['change_over_3_day'] = ?
stats_data['total_over_1_day'] = grouped_data.filter(data > 1 day ago).sum(column_name)
我用谷歌搜索了一百万个东西,每次的例子都很基础,对我的场景没有真正帮助。
感谢任何帮助。
我猜这个问题有点含糊,但经过更多研究(谷歌搜索)和 trial/error(小时)设法完成我在这里提到的所有内容。 希望可以帮助新手节省一些时间:
stats_data = data.loc[trade_data.groupby('name')['date_time'].idxmax()].reset_index(drop=True)
1_day_ago = data.loc[data[data.date_time > day_1].groupby("name")["date_time"].idxmin()].drop(labels = ['date_time','id','volume','flag'], axis=1).set_index('name')['value']
stats_data['change_over_1_day'] = stats_data['value'].astype('float') / stats_data['name'].map(1_day_ago).astype('float') * 100 - 100
相同的原则适用于其他列。 如果有人有更多 efficient/faster 方法来做到这一点,请 post 你的答案。