gpt4 book ai didi

python - 使用 Pandas 将新行添加到数据框子集中

转载 作者:太空宇宙 更新时间:2023-11-03 16:28:16 24 4
gpt4 key购买 nike

我有以下数据框:

Customer ProductID Count

John 1 25
John 6 50
Mary 2 15
Mary 3 35

我希望我的输出如下所示:

Customer ProductID Count

John 1 25
John 2 0
John 3 0
John 6 50
Mary 1 0
Mary 2 15
Mary 3 35
Mary 6 0

我想做的是识别独特的 ProductID来自数据框

unique_ID =  pd.unique(df.ProductID.ravel())
print (unique_ID) = array([1,6,2,3])

ProductID客户 John 不存在 2,3,我将按客户名称拆分数据框

df1 = df[df['Customer']=='John']
df2 = df[df['Customer']=='Mary']

打印 df1

Customer  ProductID  Count
John 1 25
John 6 50

打印 df2

Customer  ProductID  Count
Mary 2 15
Mary 3 35

我想添加ProductID 2,3 给约翰和 ProductID 1,6 给玛丽并设置Count对于这些 ProductID 为 0如上面我想要的输出所示。

最佳答案

我认为你可以使用pivot - 你得到的 NaN 值是 fillna0 和最后需要 df 的原始形状 - 使用 stackreset_index :

print (df.pivot(index='Customer',columns='ProductID', values='Count')
.fillna(0)
.stack()
.reset_index(name='Count'))
Customer ProductID Count
0 John 1 25.0
1 John 2 0.0
2 John 3 0.0
3 John 6 50.0
4 Mary 1 0.0
5 Mary 2 15.0
6 Mary 3 35.0
7 Mary 6 0.0

另一个解决方案 - 首先获取 unique列的值(ProductID 列的 sort_values),然后创建 MultiIndex.from_productreindex df 通过此 Multiindex:

a = df.Customer.unique()
b = df.ProductID.sort_values().unique()

print (a)
['John' 'Mary']
print (b)
[1 2 3 6]

m = pd.MultiIndex.from_product([a,b])
print (m)
MultiIndex(levels=[['John', 'Mary'], [1, 2, 3, 6]],
labels=[[0, 0, 0, 0, 1, 1, 1, 1], [0, 1, 2, 3, 0, 1, 2, 3]])

df1 = df.set_index(['Customer','ProductID']).reindex(m, fill_value=0).reset_index()
df1.columns = ['Customer','ProductID','Count']
print (df1)
Customer ProductID Count
0 John 1 25
1 John 2 0
2 John 3 0
3 John 6 50
4 Mary 1 0
5 Mary 2 15
6 Mary 3 35
7 Mary 6 0

关于python - 使用 Pandas 将新行添加到数据框子集中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37821903/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com