Pandas 如何对付熊猫;id变量需要唯一标识每一行;?

Pandas 如何对付熊猫;id变量需要唯一标识每一行;?,pandas,Pandas,我有一个数据帧,如: df=pd.DataFrame({ 'name1': ['A', 'A', 'C','B','C','A','D'], 'name2': ['D', 'B', 'A','D','B','C','A'], 'text': ['cars', 'cars', 'flower', 'tea','ball','phone','ice'], 'time':['10/01','10/01','10/01','10/01','10/02','10/02','

我有一个数据帧,如:

df=pd.DataFrame({
    'name1': ['A', 'A', 'C','B','C','A','D'],
    'name2': ['D', 'B', 'A','D','B','C','A'],
    'text': ['cars', 'cars', 'flower', 'tea','ball','phone','ice'],
    'time':['10/01','10/01','10/01','10/01','10/02','10/02','10/02'],
    'Flag1':[1,1,2,0,2,1,0],
    'Flag2':[0,0,1,0,0,2,1]})
期望:

pd.DataFrame({       
        'name': ['A', 'B', 'C','D','A','B','C'],
        'text': ['cars,flower','cars,tea', 'flower', 'cars,tea','phone,ice','ball','phone'],
        'time':['10/01','10/01','10/01','10/01','10/02','10/02','10/02'],
        'Flag':[1,0,2,0,1,0,2]})
我想根据“时间”组合信息。列按“时间”合并

'name':'name1'和'name2'合并为'name'

“单词”:每天,单词出现在同一用户的行中时会被合并

“时间”:用户当天出现的日期

'Flag':'Flag1'和'Flag2'合并为'Flag'。每个用户都有一个唯一的 无论日期是什么,“标志”(“0”、“1”、“2”)

但当我这样做的时候:

pd.wide_to_long(df, stubnames=["name", "Flag"], i=["text", "time"], j="ref", 
suffix="\d*").reset_index().groupby(["name","time"],
as_index=False).agg({"text": ",".join, "Flag": "first"}).sort_values(["time", "name"])
我得到:

id variables need to uniquely identify each row

如何处理这个问题?

让我知道这是否适合您。尝试:

通过获取索引来重塑形状,以用作唯一标识符
i

m = pd.wide_to_long(df.reset_index(), stubnames=["name", "Flag"], i="index", j="num")
使用groupby和一些文本操作,通过Munge获得所需的输出:

(
    m.groupby(["name", "time"])
     .agg(Flag=("Flag", "first"), text=("text", lambda x: ",".join(set(x))))
    .reset_index()
    .sort_values("time")
)


    name    time    Flag    text
0   A       10/01   1   flower,cars
2   B       10/01   0   tea,cars
4   C       10/01   2   flower
6   D       10/01   0   tea,cars
1   A       10/02   1   phone,ice
3   B       10/02   0   ball
5   C       10/02   2   phone,ball
7   D       10/02   0   ice

预期输出是什么?添加了预期。10/02应该有一个D,对吗?另外,10/02的C应该是phone和ball的组合。当我执行第二步时,我得到:aggregate()缺少1个必需的位置参数:“arg”你能分步运行它吗,这样你就可以找到错误的来源了?所以把
m.groupby([“name”,“time”])之后的所有东西都拿出来,看看它是否有效。如果有效,只添加
.agg(Flag=(“Flag”,“first”)
,然后查看是否得到结果;如果有效,则将文本部分添加到
agg
中,然后查看是否有效。这只是找到错误所在的一种方法。我使用的熊猫版本是1.1.1