根据当前行添加行

2024-04-24 10:28:45 发布

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

我的数据集包含:

ID_POINT ID_PRODUCT QUANTITY
A        11          5
A        52          10
B        30          20
C        11          2

我有所有的产品id

ID_PRODUCT
11
20
30
44
52

使用这两个表,我要创建以下表:

ID_POINT ID_PRODUCT QUANTITY
A        11          5
A        52          10
A        20          0
A        30          0
A        44          0
B        30          20
B        11          0
B        20          0
B        30          0
B        44          0
B        52          0
C        11          2
C        20          0
C        30          0
C        44          0
C        52          0

因此,如果第一个数据集ant id point不包含任何id\u产品,则必须将其添加到数量为0的数据集上

data = pd.read_csv('first.csv', delimiter=",")  # reading the file. 
products = pd.read_csv('products.csv', delimiter=",")  # reading the file. 

Tags: csvthe数据idread产品productquantity
3条回答

你需要我的朋友叫“外接”。在熊猫身上能取得什么样的成就

     new_merged_df = pd.merge(df1, df2, on='ID_PRODUCT', how='outer')
     new_merged_df.fillna(0,inplace = True)

希望有帮助

如果许多组和性能都很重要,则每个组的ID_PRODUCT顺序相同-使用^{}^{}

mux = pd.MultiIndex.from_product([df1['ID_POINT'].unique(), df2['ID_PRODUCT']],
                                  names=['ID_POINT','ID_PRODUCT'])
df = df1.set_index(['ID_POINT','ID_PRODUCT']).reindex(mux, fill_value=0).reset_index()
print (df)
   ID_POINT  ID_PRODUCT  QUANTITY
5         A          11         5
6         A          20         0
7         A          30         0
8         A          44         0
9         A          52        10
10        B          11         0
11        B          20         0
12        B          30        20
13        B          44         0
14        B          52         0
15        C          11         2
16        C          20         0
17        C          30         0
18        C          44         0
19        C          52         0

或者使用所有可能的组合创建DataFrame,并将^{}与left join一起使用:

from  itertools import product

df3 = pd.DataFrame(product(df1['ID_POINT'].unique(),  df2['ID_PRODUCT']),
                   columns=['ID_POINT','ID_PRODUCT'])
df = df3.merge(df1, how='left').fillna({'QUANTITY': 0})
print (df)
   ID_POINT  ID_PRODUCT  QUANTITY
0         A          11       5.0
1         A          20       0.0
2         A          30       0.0
3         A          44       0.0
4         A          52      10.0
5         B          11       0.0
6         B          20       0.0
7         B          30      20.0
8         B          44       0.0
9         B          52       0.0
10        C          11       2.0
11        C          20       0.0
12        C          30       0.0
13        C          44       0.0
14        C          52       0.0

您可以通过一行代码来实现这一点(假设您的意思是通过add连接/合并)

products.set_index("ID_PRODUCT").join(data[data["QUANTITY"] != 0].set_index("ID_PRODUCT"), how = "left")

相关问题 更多 >