在我的資料框中,我沒有日期列。我只有從 2022 年 1 月到 2034 年 12 月的每個月的銷售額。以下是我的資料框的示例:
import pandas as pd
data = [[6661, 'Mobile Phone', 43578, 5000, 78564, 52353], [6672, 'Play Station', 4475, 2546, 5757, 2352],
[6631, 'Personal Computer', 35347, 36376, 164577, 94584], [6600, 'Camera', 14365, 60785, 25436, 46747],
[6643, 'Lamp', 324355, 143255, 696954, 97823]]
ds = pd.DataFrame(data, columns = ['ID', 'Product', 'Sales_Jan-22', 'Sales_Feb-22', 'Sales_Mac-22', 'Sales_Apr-22'])

由于我有超過 10 個月銷售列,我想在每個月銷售列之后回圈日期。下面顯示了我想要的結果樣本:

如果該列小于 10,這很容易。但是,由于每月從 Jan-22 到 Dec-2034 (很多),有沒有辦法執行回圈并在每個銷售旁邊添加日期列月?
uj5u.com熱心網友回復:
你為什么不創建一個Date專欄?之后過濾資料以獲取一個月內售出多少給定產品會容易得多:
import pandas as pd
from datetime import datetime
data = [[6661, 'Mobile Phone', 43578, 5000, 78564, 52353], [6672, 'Play Station', 4475, 2546, 5757, 2352],
[6631, 'Personal Computer', 35347, 36376, 164577, 94584], [6600, 'Camera', 14365, 60785, 25436, 46747],
[6643, 'Lamp', 324355, 143255, 696954, 97823]]
ds = pd.DataFrame(data, columns = ['ID', 'Product', 'Sales_Jan-22', 'Sales_Feb-22', 'Sales_Mar-22', 'Sales_Apr-22'])
month_cols = ds.columns[ds.columns.str.contains('Sales')] # get all the months and years from the column names
m_y = [datetime.strptime(x[-6:], '%b-%y') for x in month_cols] # convert to datetime format
# Create a new dataframe with a 'Date' column
df = ds[['ID', 'Product']]
all_months = []
for i, d in enumerate(m_y):
df.loc[:, 'Date'] = d
df.loc[:, 'Sales'] = ds.loc[:, month_cols[i]]
all_months.append(df)
final_df = pd.concat(all_months).groupby(['Date', 'ID', 'Product']).sum()
final_df
ID Product Date Sales
0 6661 Mobile Phone 2022-04-01 52353
1 6672 Play Station 2022-04-01 2352
2 6631 Personal Computer 2022-04-01 94584
3 6600 Camera 2022-04-01 46747
4 6643 Lamp 2022-04-01 97823
0 6661 Mobile Phone 2022-04-01 52353
1 6672 Play Station 2022-04-01 2352
2 6631 Personal Computer 2022-04-01 94584
3 6600 Camera 2022-04-01 46747
4 6643 Lamp 2022-04-01 97823
0 6661 Mobile Phone 2022-04-01 52353
1 6672 Play Station 2022-04-01 2352
2 6631 Personal Computer 2022-04-01 94584
3 6600 Camera 2022-04-01 46747
4 6643 Lamp 2022-04-01 97823
0 6661 Mobile Phone 2022-04-01 52353
1 6672 Play Station 2022-04-01 2352
2 6631 Personal Computer 2022-04-01 94584
3 6600 Camera 2022-04-01 46747
4 6643 Lamp 2022-04-01 97823
uj5u.com熱心網友回復:
在@fhaney 評論之后更新答案。
如果您只想在每個銷售列之后放置一個新列,您可以執行以下操作:
def insert_col_after_sales(df, sales_col, new_col):
cols = df.columns.to_list()
i = df.columns.get_loc(sales_col)
cols.insert(i 1, new_col)
df[new_col] = ''
df = df.reindex(columns=cols)
df.loc[:, new_col] = datetime.strptime(new_col, '%b-%y')
return df
for i, d in enumerate(m_y):
sales_col = sales[i]
df = insert_col_after_sales(df, sales_col, d)
輸出:
| ID | 產品 | 銷售_Jan-22 | 1月22日 | 銷售_Feb-22 | 2月22日 | 銷售_Mar-22 | 3月22日 | 銷售_Apr-22 | Apr-22 |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 6661 | 手機 | 43578 | 2022-01-01 | 5000 | 2022-02-01 | 78564 | 2022-03-01 | 52353 |
| 1 | 6672 | 播放站 | 4475 | 2022-01-01 | 2546 | 2022-02-01 | 5757 | 2022-03-01 | 2352 |
| 2 | 6631 | 個人電腦 | 35347 | 2022-01-01 | 36376 | 2022-02-01 | 164577 | 2022-03-01 | 94584 |
| 3 | 6600 | 相機 | 14365 | 2022-01-01 | 60785 | 2022-02-01 | 25436 | 2022-03-01 | 46747 |
| 4 | 6643 | 燈 | 324355 | 2022-01-01 | 143255 | 2022-02-01 | 696954 | 2022-03-01 | 97823 |
uj5u.com熱心網友回復:
另一種選擇(僅適用于更正的Mac-22列名):
values = (pd.Series(pd.to_datetime(ds.columns[2:].str[-6:], format="%b-%y"))
.dt.to_period("M").dt.strftime("%d-%m-%Y"))
result = pd.concat(
[ds[ds.columns[:2]]] [
ds[[col]].assign(**{col[-6:]: value})
for col, value in zip(ds.columns[2:], values)
],
axis="columns"
)
結果:
ID Product Sales_Jan-22 Jan-22 Sales_Feb-22 \
0 6661 Mobile Phone 43578 31-01-2022 5000
1 6672 Play Station 4475 31-01-2022 2546
2 6631 Personal Computer 35347 31-01-2022 36376
3 6600 Camera 14365 31-01-2022 60785
4 6643 Lamp 324355 31-01-2022 143255
Feb-22 Sales_Mar-22 Mar-22 Sales_Apr-22 Apr-22
0 28-02-2022 78564 31-03-2022 52353 30-04-2022
1 28-02-2022 5757 31-03-2022 2352 30-04-2022
2 28-02-2022 164577 31-03-2022 94584 30-04-2022
3 28-02-2022 25436 31-03-2022 46747 30-04-2022
4 28-02-2022 696954 31-03-2022 97823 30-04-2022
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/444540.html
上一篇:比較兩個csv檔案之間的資料并計算有多少行具有相同的資料
下一篇:計算客戶購買的次數
