Pandas 在 groupby() 之后用逗号连接列值
Pandas concatenate column values with comma after groupby()
我有一个这样的 pandas 数据框:
Column1
Column2
Column3
a
k
x
a
l
y
b
k
z
我想将此数据框转换为:
Column1
Column2
Column3
a
"k,l"
"x,y"
b
k
z
我找到了类似的示例,但找不到解决我的问题的确切方法。非常感谢您的帮助!
您可能希望使用自定义函数连接利用 pandas.DataFrame.transform
:
的字符串
df.groupby(['Column1']).transform(lambda val: ','.join(val))
尝试 groupby
然后 agg
df_ = (df.groupby(['Column1'])
.agg({'Column2': lambda x: ','.join(x), 'Column3': lambda x: ','.join(x)})
.reset_index()
)
print(df_)
Column1 Column2 Column3
0 a k,l x,y
1 b k z
如果需要引号
df_ = (df.groupby(['Column1'])
.agg({'Column2': lambda x: f'"{",".join(x)}"' if len(x)>1 else x,
'Column3': lambda x: f'"{",".join(x)}"' if len(x)>1 else x})
.reset_index()
)
Column1 Column2 Column3
0 a "k,l" "x,y"
1 b k z
您可以使用 groupby
和 agg
:
df.groupby(["Column1"], as_index=False).agg(lambda x: ",".join(x))
编辑
刚发现 lambda
这里甚至不需要:
df.groupby(["Column1"], as_index=False).agg(",".join)
输出:
Column1 Column2 Column3
0 a k,l x,y
1 b k z
我有一个这样的 pandas 数据框:
Column1 | Column2 | Column3 |
---|---|---|
a | k | x |
a | l | y |
b | k | z |
我想将此数据框转换为:
Column1 | Column2 | Column3 |
---|---|---|
a | "k,l" | "x,y" |
b | k | z |
我找到了类似的示例,但找不到解决我的问题的确切方法。非常感谢您的帮助!
您可能希望使用自定义函数连接利用 pandas.DataFrame.transform
:
df.groupby(['Column1']).transform(lambda val: ','.join(val))
尝试 groupby
然后 agg
df_ = (df.groupby(['Column1'])
.agg({'Column2': lambda x: ','.join(x), 'Column3': lambda x: ','.join(x)})
.reset_index()
)
print(df_)
Column1 Column2 Column3
0 a k,l x,y
1 b k z
如果需要引号
df_ = (df.groupby(['Column1'])
.agg({'Column2': lambda x: f'"{",".join(x)}"' if len(x)>1 else x,
'Column3': lambda x: f'"{",".join(x)}"' if len(x)>1 else x})
.reset_index()
)
Column1 Column2 Column3
0 a "k,l" "x,y"
1 b k z
您可以使用 groupby
和 agg
:
df.groupby(["Column1"], as_index=False).agg(lambda x: ",".join(x))
编辑
刚发现 lambda
这里甚至不需要:
df.groupby(["Column1"], as_index=False).agg(",".join)
输出:
Column1 Column2 Column3
0 a k,l x,y
1 b k z