簡體   English   中英

如何在 python 中加入數據幀,其中每個 dataframe 都有一個代表特定時間不同進程值的列

[英]How do I join dataframes in python where each dataframe has a column which represents different processes values at a specific time

我的標題有點亂,但希望下面的信息足夠具體。

我有一個腳本,它從在線商店抓取商品的名稱和價格,並將它們存儲在 pandas dataframe 中,其中包含 2 列名稱和價格。 該腳本定期運行並將數據導出到 csv。 現在我想結合數據來分析不同產品價格隨時間的變化趨勢。 我遇到的問題是,任何一天刮下來的物品不一定與其他日子相同,物品的順序也不同。 我如何能夠將價格數據存儲在 dataframe 中,其中每一行代表一個特定的產品。

編輯:我的輸入將是幾個這樣的表,其中每個表來自特定日期,項目可能不同,順序也可能不同

物品 價格
100
自行車 200
... ...

我想要的 Output:

物品 昨天 今天 明天 ...
100 200 150 不適用
房子 2000 2000 2000 ...
自行車 不適用 10 10 ...
... ... ... ... ...

也許您可以對數據進行分區並生成 pivot 表來產生您想要的結果。

import pandas as pd

df = pd.DataFrame({
        "Item": ["Car", "Bike", "Car", "Bike", "Car", "Bike",],
        "Price": ["100", "", "200", "10", "150", "10"],
        })

# Use pd.concat() to join multiple dataframes.
# e.g. - pd.concat([df1, df2])
# Then move onto the next part of this solution

df["partition"] = df.groupby("Item").cumcount()

result = df.pivot(index="Item", columns="partition", values="Price")

print(result)

Output -

partition    0    1    2
Item                    
Bike             10   10
Car        100  200  150

pandas 中有一個“連續”function:

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.concat.html

首先:我初始化 DataFrames 並將產品列的“名稱”設置為索引:

df1 = pd.DataFrame({"Name":["product1", "product2", "product3"],
                    "Price_date1":[1,2,3]}).set_index("Name")


df2 = pd.DataFrame({"Name":["product1", "product2", "product4"],
                    "Price_date2":[3,4,5]}).set_index("Name")

然后我連接Dataframes,你可以在這里傳遞多個dataframes的列表

df_con = pd.concat([df1, df2], axis=1)

Output od df_con:

          Price_date1  Price_date2
product1          1.0          3.0
product2          2.0          4.0
product3          3.0          NaN
product4          NaN          5.0

導入 pandas 作為 pd 導入 numpy 作為 np

假設這些是您的數據

data1 = {'Item':['Car','House','Bike'], 'Price':[1.0,2.1,3.0]}
data2 = {'Item':['Car','House','Umbrella'], 'Price':[1.2,2.2,5.2]}
data1 = pd.DataFrame(data1)
data2 = pd.DataFrame(data2)

這些是你的數據框

data_list = [data1, data2]

這就是你想要的代碼:

result = pd.DataFrame([])
for i, cr_df in enumerate(data_list):
    data = cr_df.rename(columns={'Price':'Day'+str(i)}).set_index('Item').transpose()
    if i == 0:
        result = data.copy()
    else:
        result = result.append(data)

result = result.transpose()

那就是您將獲得的 output:

          Day0     Day1
Bike      3.0      nan
Car       1.0      1.2
House     2.1      2.2
Umbrella  nan      5.2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM