【发布时间】:2015-05-13 04:51:29
【问题描述】:
我有两个熊猫数据框: 一个包含客户号码的匿名散列(这里为简单起见,是数字 0-19 的散列)
import pandas as pd
import numpy as np
from hashlib import sha1
df_customers = pd.DataFrame( [ sha1(i).hexdigest() for i in np.arange(20)] )
df_customers.columns = ["customer"]
现在我有第二个表(DataFrame),其中包含 200 次出现的客户从 20 种不同种类的水果中挑选:
fruit = ["apple", "banana", "peach", "plum", "orange", "cumquat", "raspberry", "lemon", "rubarb", "pineapple"]
pd.DataFrame( np.c_[ np.array([ sha1(i).hexdigest() for i in np.random.randint(0,20,200) ]),
np.array([ fruit[i] for i in np.random.randint(0,len(fruit),200) ]) ],
columns=("customer_id","fruit")
)
现在我想在客户 DataFrame 中添加一列,指示食用水果的种类——即每位客户食用的不同水果的数量。为此我做到了:
variety = df_eating.groupby("customer_id")["fruit"].apply( lambda x: len(np.unique(x)))
这给了我一个“系列”。现在我觉得应该有一种直接的方式将其添加回 df_customer,尊重 customer_id 但在这里我很卡住:
pd_customer["variety"] = variety
不尊重客户 ID 并为每个值提供 NaN
还有像pd.merge() 这样的函数,其中有一个选项可以合并“on”某事并没有达到我想要的效果。
【问题讨论】:
-
我已经用 numpy 做了很多,但我是 pandas 的新手,所以任何关于如何改进我上面的代码的 cmets 也非常受欢迎