pandas将分组数据帧添加到另一个数据帧作为行

时间:2016-05-14 11:55:59

标签: python pandas dataframe

我得到以下数据框:

category_name             amount
Blades & Razors & Foam     158
Diaper                     486
Empty                      193
Fem Care                  2755
HairCare                  3490
Irrelevant                1458
Laundry                    889
Oral Care                 2921
Others                      69
Personal Cleaning Care    1543
Skin Care                  645

我想将其作为行添加到具有第一个数据帧不存在的附加retailer column的后续数据帧。

categories_columns = ['retailer'] + self.product_list.category_name.unique().tolist()
categories_df = pd.DataFrame(columns=categories_columns)

如果缺少某些类别,我只想要零值。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

使用set_indexcategory_name列移动到索引中。然后进行转置(.T)会将category_name移动到列索引中:

In [35]: df1
Out[35]: 
   amount cat
0       0   A
1       1   B
2       2   C

In [36]: df1.set_index('cat').T
Out[36]: 
cat     A  B  C
amount  0  1  2

一旦类别名称(上面的cat)在列索引中,您就可以连接 第二个DataFrame重构的DataFrame使用append或`pd.concat。

pd.concat使用NaN填充缺失的值。使用fillna(0)NaN替换为0。

import numpy as np
import pandas as pd

df1 = pd.DataFrame({'amount': range(3), 'cat': list('ABC')})
df2 = pd.DataFrame(np.arange(2*4).reshape(2, 4), columns=list('ABCD'))
result = df2.(df1.set_index('cat').T).fillna(0)
print(result)

产量

        A  B  C    D
0       0  1  2  3.0
1       4  5  6  7.0
amount  0  1  2  0.0

答案 1 :(得分:0)

只需追加并替换Nan:

pd.DataFrame(columns=products).append(df.T).fillna(0)