2024-06-23 01:09:46 发布
网友
我有这样一个df:
df
df = pd.DataFrame( {"Client" : ["Alice", "Nan", "Nan", "Mallory", "Nan" , "Bob"] , "Product" : ["A", "B", "C", "B", "C", "B"] } )
我想得出这样的结果:
Alice A, B, C Mallory B, C Bob B
有人知道如何使用Python3实现这一点吗
像这样的怎么样
import pandas as pd from collections import defaultdict df = pd.DataFrame( {"Client" : ["Alice", "Nan", "Nan", "Mallory", "Nan" , "Bob"] , "Product" : ["A", "B", "C", "B", "C", "B"] } ) last_client = None data = defaultdict(list) for _, row in df.iterrows(): # id hazard a guess you want np.nan not the string compare here if row.Client != last_client and row.Client != "Nan": last_client = row.Client data[last_client].append(row.Product) print(data)
defaultdict(, {'Alice': ['A', 'B', 'C'], 'Mallory': ['B', 'C'], 'Bob': ['B']})
分组后,可以对join项执行agg函数
join
agg
熊猫0.25+
df = df.replace("Nan",np.NaN).ffill() df.groupby('Client', sort=False)['Product'].agg(Product=('Product',','.join)).reset_index()
熊猫在0.25以下
df=df.replace("Nan",np.NaN).ffill() df.groupby('Client', sort=False)['Product'].agg([('Product', ','.join)]).reset_index()
输出
Client Product 0 Alice A,B,C 1 Mallory B,C 2 Bob B
看起来您拥有groupby操作的输出(数据所在的位置是“Nan”),您需要将其恢复到groupby状态,以便对其执行任何有用的操作
首先将字符串“Nan”转换为实际的Nan
import numpy as np df.replace("Nan", np.NaN, inplace=True)
那菲尔就可以工作了
df.ffill(axis=0, inplace=True)
然后获取输出的格式:(这里是魔术发生的地方)
for group, data in df.groupby(df.Client): print(group, data.Product.tolist()) Alice ['A', 'B', 'C'] Bob ['B'] Mallory ['B', 'C']
我将把f字符串格式化作为家庭作业
像这样的怎么样
分组后,可以对
join
项执行agg
函数熊猫0.25+
熊猫在0.25以下
输出
看起来您拥有groupby操作的输出(数据所在的位置是“Nan”),您需要将其恢复到groupby状态,以便对其执行任何有用的操作
首先将字符串“Nan”转换为实际的Nan
那菲尔就可以工作了
然后获取输出的格式:(这里是魔术发生的地方)
我将把f字符串格式化作为家庭作业
相关问题 更多 >
编程相关推荐