python - 添加数据时从数据框中删除列表
问题描述
从...开始:
import pandas as pd
lis1= [['apples'],['bananas','oranges','cinnamon'],['pears','juice']]
lis2= [['john'],['stacy'],['ron']]
pd.DataFrame({'fruits':lis1,'users':lis2})
fruits users
0 [apples] [john]
1 [bananas, oranges, cinnamon] [stacy]
2 [pears, juice] [ron]
我想结束:
lis3= ['apples','bananas','oranges','cinnamon','pears','juice']
lis4= ['john','stacy','stacy','stacy','ron','ron']
pd.DataFrame({'fruits': lis3, 'users':lis4})
fruits users
0 apples john
1 bananas stacy
2 oranges stacy
3 cinnamon stacy
4 pears ron
5 juice ron
首先,我需要创建一个新的数据框,每个项目都位于自己的行中。其次,名称变量需要根据“水果”的数量重复。所以看这个例子,John 有一个水果,而 Stacy 有 5 个水果——所以在用户名下,Stacy 必须重复 5 次。
解决方案
itertools
from itertools import chain, product, starmap
pd.DataFrame(
[*chain(*starmap(product, zip(df.fruits, df.users)))],
columns=df.columns
)
fruits users
0 apples john
1 bananas stacy
2 oranges stacy
3 cinnamon stacy
4 pears ron
5 juice ron
如果您只有 2 列,这也适用
pd.DataFrame(
[*chain(*starmap(product, zip(*map(df.get, df))))],
columns=df.columns
)
generator
def f(z):
for A, B in z:
for a in A:
for b in B:
yield (a, b)
pd.DataFrame([*f(zip(df.fruits, df.users))], columns=df.columns)
fruits users
0 apples john
1 bananas stacy
2 oranges stacy
3 cinnamon stacy
4 pears ron
5 juice ron
推荐阅读
- php - PHP/MySQL:获取范围而不是数组?
- css - 如何修复此动画故障?
- xml - 如何为 MWS 上的产品 Feed 提交创建 Item 节点?
- linux - 如何从所有文件中替换 '>> $log_file 2>&1'
- vue.js - Vue.js Axios responseType blob 或 json 对象
- gnuplot - Gnuplot - 脚本内部错误,但是当我正常编写它时它可以工作,但脚本没有
- php - PHP生成无效字符串
- date - 在招摇 UI 中遇到日期时间问题
- clarifai - Clarifai Python gRPC 接口的文档(不是示例)
- r - sf 对象是否有 .RData 等价物?