在csv,pandas中的groupby之后创建自定义列
Posted
技术标签:
【中文标题】在csv,pandas中的groupby之后创建自定义列【英文标题】:Creating a custom column after groupby in csv, pandas 【发布时间】:2020-11-28 20:16:27 【问题描述】:鉴于以下 csv 文件:
ID A B C R1 R2
-----------------------
1 A1 B1 C1 abc ghi
1 A1 B1 C2 def jkl
2 A2 B3 C1 mno stu
2 A2 B3 C2 pqr vwx
需要在下面的输出中添加一个新列“R”:
ID A B R
-------------------------
1 A1 B1 (abc, def) & (ghi, jkl)
2 A2 B3 (mno, pqr) & (stu, vwx)
假设 C 列只有 C1、C2 值
import pandas as pd
df = pd.read_csv(r'file.csv')
grouped_df = df.groupby(['ID', 'A', 'B'])
# Here how do we create our new and custom column?
【问题讨论】:
【参考方案1】:In [54]: df
Out[54]:
ID A B C R1 R2
0 1 A1 B1 C1 abc ghi
1 1 A1 B1 C2 def jkl
2 2 A2 B3 C1 mno stu
3 2 A2 B3 C2 pqr vwx
In [55]: grouped_df = df.groupby(['ID', 'A', 'B'])[["R1","R2"]].agg(tuple).reset_index()
In [56]: grouped_df["R"] = grouped_df["R1"].astype(str) + " & " + grouped_df["R1"].astype(str)
In [57]: grouped_df.drop(["R1","R2"],axis=1,inplace=True)
In [58]: grouped_df
Out[58]:
ID A B R
0 1 A1 B1 ('abc', 'def') & ('abc', 'def')
1 2 A2 B3 ('mno', 'pqr') & ('mno', 'pqr')
【讨论】:
【参考方案2】:您可以使用agg
、''.join
和filter
:
df.groupby(['ID','A','B'])
.agg(lambda x: '('+', '.join(x)+')')
.filter(like='R').agg('&'.join,1)
.reset_index().rename(columns=0:'R')
详情
df.groupby(['ID','A','B']).agg(lambda x: '('+', '.join(x)+')')
# C R1 R2
#ID A B
#1 A1 B1 (C1, C2) (abc, def) (ghi, jkl)
#2 A2 B3 (C1, C2) (mno, pqr) (stu, vwx)
df.groupby(['ID','A','B']).agg(lambda x: '('+', '.join(x)+')').filter(like='R')
# R1 R2
#ID A B
#1 A1 B1 (abc, def) (ghi, jkl)
#2 A2 B3 (mno, pqr) (stu, vwx)
df.groupby(['ID','A','B']).agg(lambda x: '('+', '.join(x)+')').filter(like='R').agg('&'.join,1).reset_index()
# ID A B 0
#0 1 A1 B1 (abc, def)&(ghi, jkl)
#1 2 A2 B3 (mno, pqr)&(stu, vwx)
df.groupby(['ID','A','B']).agg(lambda x: '('+', '.join(x)+')').filter(like='R').agg('&'.join,1).reset_index().rename(columns=0:'R')
# ID A B R
#0 1 A1 B1 (abc, def)&(ghi, jkl)
#1 2 A2 B3 (mno, pqr)&(stu, vwx)
【讨论】:
优雅方案+1 很好的解决方案!以上是关于在csv,pandas中的groupby之后创建自定义列的主要内容,如果未能解决你的问题,请参考以下文章
Pandas 在 groupby 和 nlargest 之后创建额外(重复)索引
Python for DF 基于 Excel 和 CSV 的不同结果 pandas Groupby