【问题标题】:Create new dataframe combining two different dataframe columns创建结合两个不同数据框列的新数据框
【发布时间】:2019-01-22 19:52:07
【问题描述】:

我有两个数据框

df1# - 这有用户ID和相应用户购买的产品。

Userid, Productid,    Ordered_Qty
user1           1         1
user1           2         1
user1           3         1
user2           4         1
user2           5         1
user2           3         1
user3           2         1
user3           4         1
user3           5         1

df2# - 这里有产品主文件

Productid, some_attribute
1             "xsff"
2             "xsff"                
3             "xsff"
4             "xsff" 
5             "xsff"

现在,我想创建如下所示的新数据框,

Row - Userid from df1
columns - Productid from df2

新数据框# - [i,j] 值对应于 df1# Ordered_Qty(any qty)。基本上我想获得 df2 中的所有值 - Productid 但在新数据框中填充值 来自df1。如果 df1 没有 userid(row) & product(col) 组合的条目,那么我喜欢在其中保留零

      1 2 3 4 5
user1 1 1 1 0 0
user2 0 0 1 1 1 
user3 0 1 0 1 1

为此,我所做的是

new_dataframe = pd.dataframe(0,index=df1.Userid.unique(),columns=df2.Productid.unique())

for index,row in df1.iterrows():
    userid = row['Userid']
    productid = row['Productid']
    ord_qty =  row['Ordered_Qty']
    new_dataframe.loc[userid][productid] = ord_qty

但是这种方式会花费更多时间并最终导致内存错误。 有没有更好的办法?

【问题讨论】:

    标签: python-3.x pandas


    【解决方案1】:

    使用pivotpivot_tablecrosstab

    df3 = df.pivot(index='Userid', columns='Productid').fillna(0, downcast='infer')
    df3.columns = df3.columns.get_level_values(1)
    

    或者:

    df3 = df.pivot_table(index='Userid', columns='Productid', fill_value=0)
    df3.columns = df3.columns.get_level_values(1)
    

    或者:

    df3 = pd.crosstab(df['Userid'], df['Productid'])
    

    然后:

    df3 = df3.reindex(columns=df2.Productid.unique(), fill_value=0)
    

    【讨论】:

      【解决方案2】:

      请使用交叉表:

      pandas.crosstab(df['userid'], df['productid'])
      

      【讨论】:

        猜你喜欢
        • 2014-01-03
        • 1970-01-01
        • 2018-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-20
        • 2020-11-13
        • 2022-01-01
        相关资源
        最近更新 更多