猿问

Python Pandas从众多列表中创建独特的数据框

嗨,我想创建一个数据帧,在每个列中存储一个唯一变量及其平均值。目前,我有一个包含2列的数据框。一个具有名称列表,而另一个具有单个值。我想将该值与列表中的所有名称相关联,并最终找到所有名称的平均值。这是我拥有的数据:


Df1:

names_col                    cost_col

[milk, eggs, cookies]          3

[water, milk, yogurt]          5 

[cookies, diaper, yogurt]      7

这就是我要的:


Df2:

names_col             avg_cost_col

milk                       4

eggs                       3

cookies                    5

water                      5

yogurt                     6

diaper                     7

我考虑过以某种方式对所有行进行套用,或使用set()从每个列表中删除重复项,但我不确定。任何帮助将不胜感激


皈依舞
浏览 153回答 3
3回答

幕布斯6054654

关于矢量化解决方案的建议ndf = pd.DataFrame({'a':np.repeat(df.cost_col.values, df.names_col.str.len()),                    'b':np.concatenate(df.names_col.values)})产量    a   b0   3   milk1   3   eggs2   3   cookies3   5   water4   5   milk5   5   yogurt6   7   cookies7   7   diaper8   7   yogurt然后就是普通groupy+meanndf.groupby('b').mean()        ab   cookies 5diaper  7eggs    3milk    4water   5yogurt  6

慕哥9229398

IIUC将您的列表弄平(嵌套)pd.DataFrame(data=df.cost_col.repeat(df.names_col.str.len()).values,index=np.concatenate(df.names_col.values)).mean(level=0)Out[221]:          0milk     4eggs     3cookies  5water    5yogurt   6diaper   7

POPMUISE

Set()是删除重复项的最简单答案。* list_name表示法用于扩展/解压缩列表。l = [["milk", "eggs", "cookies"],     ["water", "milk", "yogurt"],     ["cookies", "diaper", "yogurt"]]c = set([*l[0], *l[1], *l[2]]){'cookies', 'eggs', 'diaper', 'yogurt', 'water', 'milk'}并将其用作您的熊猫列名称。您可以根据需要使用list()将其转换回列表
随时随地看视频慕课网APP

相关分类

Python
我要回答