我有一个看起来像这样的数据框
Site Sector Model Frequency Bandwidth
A 1 abc 900 500M
A 2 abc 900 1000M
A 3 abc 900 1000M
A 1 abc 1000 2000M
A 2 abc 1000 3000M
A 3 abc 1000 3000M
B 1 def 900 150M
B 2 def 900 220M
B 3 def 900 300M
B 1 def 1000 450M
B 2 def 1000 600M
B 3 def 1000 1000M
并且我已经使用groupby和agg函数连接了Frequency
和Bandwidth
。
grouped_df = ndb_df.groupby(by=['Site', 'Sector'], as_index=False).agg({'Frequency': lambda x: '#'.join(x.astype(str)), 'Bandwidth': lambda y: '#'.join(y.astype(str))})
这将导致以下数据帧输出
Site Sector Frequency Bandwidth
A 1 900#1000 500M#2000M
A 2 900#1000 1000M#3000M
A 3 900#1000 1000M#3000M
B 1 900#1000 150M#450M
B 2 900#1000 220M#600M
B 3 900#1000 300M#1000M
输出grouped_df删除了我希望保留的列Model
。有什么想法吗?
我真正想要的
Site Sector Model Frequency Bandwidth
A 1 abc 900#1000 500M#2000M
A 2 abc 900#1000 1000M#3000M
A 3 abc 900#1000 1000M#3000M
B 1 def 900#1000 150M#450M
B 2 def 900#1000 220M#600M
B 3 def 900#1000 300M#1000M
答案 0 :(得分:1)
第一个想法是,如果Model
之类的组相同,则将by
列添加到Site
参数中。
grouped_df = (ndb_df.groupby(by=['Site', 'Sector', 'Model'], as_index=False)
.agg({'Frequency': lambda x: '#'.join(x.astype(str)),
'Bandwidth': lambda y: '#'.join(y.astype(str))})
或使用GroupBy.first
函数将此列添加到字典:
grouped_df = (ndb_df.groupby(by=['Site', 'Sector'], as_index=False)
.agg({'Model':'first',
'Frequency': lambda x: '#'.join(x.astype(str)),
'Bandwidth': lambda y: '#'.join(y.astype(str))
}))
print (grouped_df)
Site Sector Model Frequency Bandwidth
0 A 1 abc 900#1000 500M#2000M
1 A 2 abc 900#1000 1000M#3000M
2 A 3 abc 900#1000 1000M#3000M
3 B 1 def 900#1000 150M#450M
4 B 2 def 900#1000 220M#600M
5 B 3 def 900#1000 300M#1000M
也可以将lambda函数分配给变量,例如:
f = lambda x: '#'.join(x.astype(str))
grouped_df = (ndb_df.groupby(by=['Site', 'Sector'], as_index=False)
.agg({'Model':'first',
'Frequency': f,
'Bandwidth': f})
)