我有一个相当“跨平台的”问题。我希望它不是太笼统。
我的一个表,例如let timestampDiffs = [3, 2, 4];
(async () => {
for (let item of timestampDiffs) {
await timeout(item * 1000);
console.log('waited: ' + item);
}
})();
function timeout(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
,由我的客户ID及其相关的受众特征信息组成。另一个表,customers
,包含从各个商店的顾客那里购买的所有商品。
我对分析篮子组成以及python中的受众特征感兴趣。因此,我想将商店作为列,并在我的数据框中将商店中给定客户的总和作为
为清楚起见,
transaction
给我
select *
from customer
where id=1 or id=2
和
id age gender
1 35 MALE
2 57 FEMALE
给我
select *
from transaction
where id=1 or id=2
应该以(最好是)Pandas数据框结尾
customer_id shop amount
1 2 250
1 2 500
2 3 100
2 7 200
2 11 125
最后一列是客户的汇总篮子。
我已尝试通过以下方式为SQL中的每个客户创建一个有关购买和金额的python字典:
id age gender shop_2 shop_3 shop_7 shop_11
1 35 MALE 750 0 0 0
2 57 FEMALE 0 100 200 125
产生
select customer_id, array_agg(concat(cast(shop as varchar), ' : ', cast(amount as varchar))) as basket
from transaction
group by customer_id
可以很容易地加入到客户表中。
但是,由于它是字符串而不是[]中的整数,因此该解决方案不是最佳的。因此,要在我想要的格式上进行处理,需要在python中进行大量的操作和循环。
有什么方法可以在SQL中汇总购买的内容,从而使python更容易读取并汇总到列中?
答案 0 :(得分:0)
一个简单的解决方案是在第二个数据帧上使用pivot_table
,然后在第一个数据帧上使用merge
,以熊猫为单位进行聚合:
<Window x:Class="dragdropButton.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:dragdropButton"
mc:Ignorable="d"
Title="MainWindow" Height="418" Width="779"
PreviewMouseMove="Window_PreviewMouseMove">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="0*"/>
<ColumnDefinition Width="0*"/>
</Grid.ColumnDefinitions>
<Button x:Name="button" HorizontalAlignment="Left" Margin="241,167,0,0" VerticalAlignment="Top" Width="75" MouseUp="button_MouseUp" MouseDown="button_MouseDown" Height="40"/>
</Grid>
</Window>
结果数据框:
df2 = df2.pivot_table(columns='shop', values='amount', index='customer_id', aggfunc='sum', fill_value=0.0).reset_index()
df = pd.merge(df1, df2, left_on='id', right_on='customer_id')