Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Groupby和join值,但保留所有列_Python_Python 3.x_Pandas_Pandas Groupby - Fatal编程技术网

Python Groupby和join值,但保留所有列

Python Groupby和join值,但保留所有列,python,python-3.x,pandas,pandas-groupby,Python,Python 3.x,Pandas,Pandas Groupby,我有这个数据帧,希望根据ID分组并加入值 ID | A_Num | I_Num -------------------------- 001 | A_001 | I_001 002 | A_002 | I_002 003 | A_003 | I_004 005 | A_002 | I_002 期望输出 ID | A_Num | I_Num -------------------------- 001 | A_001 | I_001 002;005 | A_002 | I_0

我有这个数据帧,希望根据ID分组并加入值

ID  | A_Num | I_Num
--------------------------
001 | A_001 | I_001
002 | A_002 | I_002
003 | A_003 | I_004
005 | A_002 | I_002
期望输出

ID      | A_Num | I_Num
--------------------------
001     | A_001 | I_001
002;005 | A_002 | I_002
003     | A_003 | I_004
代码:

当我将数据帧写入csv文件时,我只有ID列。

尝试
reset\u index()

df=df.groupby(['A_Num','I_Num'])[“ID”].apply(lambda标记:';').join(标记.值)).reset_index()

这样,将执行来自
apply()
的聚合,然后将其重新指定为
,而不是
索引

,另一种方法是:

result= df.groupby(['A_Num', 'I_Num']).agg({'ID': list})
result.reset_index(inplace=True)
result[['ID', 'A_Num', 'I_Num']]
输出为:

Out[37]: 
             ID    A_Num   I_Num
0        [001 ]   A_001    I_001
1  [002 , 005 ]   A_002    I_002
2        [003 ]   A_003    I_004
在这种情况下,ID包含列表。如果您想要字符串,只需执行以下操作:

result['ID']= result['ID'].map(lambda lst: ';'.join(lst))
result[['ID', 'A_Num', 'I_Num']]
哪些产出:

Out[48]: 
        ID  A_Num  I_Num
0      001  A_001  I_001
1  002;005  A_002  I_002
2      003  A_003  I_004

Groupby'A_Num'和'I_Num',然后合并相同组中的ID

df.groupby(['A_Num','I_Num']).ID.apply(lambda x: ';'.join(x.tolist())).reset_index()

您正在这里选择
ID
df=df.groupby(['A_Num','I_Num'])['ID']
对不起,我不明白您的意思
df.groupby(['A_Num','I_Num'])['ID']。应用(';'.join)。重置索引().reindex(columns=df columns)。to_csv(…)
以保持原始列顺序
df.groupby(['A_Num','I_Num']).ID.apply(lambda x: ';'.join(x.tolist())).reset_index()