为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

皈依舞 2021-05-14 16:10:03
嗨,我想创建一个数据帧,在每个列中存储一个唯一变量及其平均值。目前,我有一个包含2列的数据框。一个具有名称列表,而另一个具有单个值。我想将该值与列表中的所有名称相关联,并最终找到所有名称的平均值。这是我拥有的数据:Df1:names_col                    cost_col[milk, eggs, cookies]          3[water, milk, yogurt]          5 [cookies, diaper, yogurt]      7这就是我要的:Df2:names_col             avg_cost_colmilk                       4eggs                       3cookies                    5water                      5yogurt                     6diaper                     7我考虑过以某种方式对所有行进行套用,或使用set()从每个列表中删除重复项,但我不确定。任何帮助将不胜感激
查看完整描述

3 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

关于矢量化解决方案的建议


ndf = pd.DataFrame({'a':np.repeat(df.cost_col.values, df.names_col.str.len()),

                    'b':np.concatenate(df.names_col.values)})

产量


    a   b

0   3   milk

1   3   eggs

2   3   cookies

3   5   water

4   5   milk

5   5   yogurt

6   7   cookies

7   7   diaper

8   7   yogurt

然后就是普通groupy+mean


ndf.groupby('b').mean()


        a

b   

cookies 5

diaper  7

eggs    3

milk    4

water   5

yogurt  6


查看完整回答
反对 回复 2021-05-18
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

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]: 

         0

milk     4

eggs     3

cookies  5

water    5

yogurt   6

diaper   7


查看完整回答
反对 回复 2021-05-18
?
POPMUISE

TA贡献1765条经验 获得超5个赞

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()将其转换回列表


查看完整回答
反对 回复 2021-05-18
  • 3 回答
  • 0 关注
  • 152 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号