python-3.x - 与 pandas 进行分组和合并
问题描述
我需要一些帮助。
我必须在“名称”列中转换此数据框而不重复
您可以看到我在“名称”列中有重复项,例如:John , Joan
df0 = pd.DataFrame({'name':['John','John','Joan','Joan','Juan'],
'time':[20,10,11,18, 15],
'amount':[100, 400, 200, 100, 300]})
df0
name time amount
0 John 20 100
1 John 10 400
2 Joan 11 200
3 Joan 18 100
4 Juan 15 300
我需要对此进行转换,以这种方式对数据框进行分组,我不知道是否正确。
dfend0 = df0.groupby('name').agg(lambda x: x.tolist())
dfend0
time amount
name
Joan [11, 18] [200, 100]
John [20, 10] [100, 400]
Juan [15] [300]
“名称”列现在是索引,这不是我正在寻找的行为
list(dfend0.columns.values)
['time', 'amount']
#现在我需要与其他数据框合并
df1 = pd.DataFrame({
'name' : ['John' ,'Joan', 'Juan'],
'address' : ['streetA','streetB','streetC'],
'age' : [30,40,50]
})
df1
name address age
0 John streetA 30
1 Joan streetB 40
2 Juan streetC 50
ender = df1.merge(df0)
ender
name address age time amount
0 John streetA 30 20 100
1 John streetA 30 10 400
2 Joan streetB 40 11 200
3 Joan streetB 40 18 100
4 Juan streetC 50 15 300
这不是我要找的,这个例子会更准确:
name address age time amount
0 John streetA 30 20,10 100,400
1 Joan streetB 40 11,18 200,100
2 Juan streetC 50 15 300
有什么线索吗?
解决方案
首先,as_index=False
如果您不希望名称作为 groupby 操作后的索引,请使用。
2、不需要使用 lambda.agg(list)
dfend0 = df0.groupby('name',as_index=False).agg(list)
然后像往常一样合并。
df2 = pd.merge(df1,df0end,on='name')
name address age time amount
0 John streetA 30 [20, 10] [100, 400]
1 Joan streetB 40 [11, 18] [200, 100]
2 Juan streetC 50 [15] [300]
请注意,如果您不想使用列表(不建议使用,因为您丢失了基础数据类型并以字符串结尾)
df0end = df0.astype(str).groupby('name',as_index=False).agg(','.join)
name time amount
0 Joan 11,18 200,100
1 John 20,10 100,400
2 Juan 15 300
df2 = pd.merge(df1,df0end,on='name')
name address age time amount
0 John streetA 30 20,10 100,400
1 Joan streetB 40 11,18 200,100
2 Juan streetC 50 15 300
推荐阅读
- delphi - QuickReport:将详细信息带和子带保持在一页上
- python - 如何使用 bs4 获取 youtube 音乐历史?
- swift - 水平 UIcollectionView 滚动从右到左开始
- react-native - 跨应用程序重用 React Native 屏幕
- typescript - 使用 typeof 后定义泛型函数的泛型类型
- python - python“.exe”文件是否与python“.py”文件相同?
- spring-integration - Spring Integration DSL EnrichedHeaders 未被替换
- angular - 在本地服务器上部署后不加载图像
- macos - 如何使用 Option+鼠标滚动事件平滑缩放视图
- javascript - 在运行js之前包含html文件并等待所有加载