根据其他列上的条件,在python中创建dataframe列

2024-05-23 16:06:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据帧(实际上,我使用的数据帧大约为2000万行):

shop month day sale
1      7     1   10
1      6     1   8
1      5     1   9
2      7     1   10
2      6     1   8
2      5     1   9

我想要另一列:“上一个月的销售额”,其中销售额等于“上个月同一天的销售额,例如

^{pr2}$

Tags: 数据saleshopdaymonth销售额pr2
1条回答
网友
1楼 · 发布于 2024-05-23 16:06:23

一种使用.concat()set_index().loc[]的解决方案:

# Get index of (shop, previous month, day).
# This will serve as a unique index to look up prev. month sale.
prev = pd.concat((df.shop, df.month - 1, df.day), axis=1)
# Unfortunately need to convert to list of tuples for MultiIndexing
prev = pd.MultiIndex.from_arrays(prev.values.T)
# old: [tuple(i) for i in prev.values]

# Now call .loc on df to look up each prev. month sale.
sale_prev_month = df.set_index(['shop', 'month', 'day']).loc[prev]

# And finally just concat rather than merge/join operation
#     because we want to ignore index & mimic a left join.
df = pd.concat((df, sale_prev_month.reset_index(drop=True)), axis=1)

   shop  month  day  sale  sale
0     1      7    1    10   8.0
1     1      6    1     8   9.0
2     1      5    1     9   NaN
3     2      7    1    10   8.0
4     2      6    1     8   9.0
5     2      5    1     9   NaN

您的新列将是float,而不是int,because表示NaNs的存在。在

更新-尝试使用dask

我不使用达斯克每天,所以这可能是可悲的低于标准。试图解决dask没有实现熊猫的多重索引这一事实。因此,您可以将现有的三个索引连接到一个字符串列中,并对其进行查找。在

^{pr2}$

相关问题 更多 >