Python 在同一数据帧中联接行
我有一个数据框,我想做一些更改。以下是一个示例:Python 在同一数据帧中联接行,python,python-3.x,pandas,pandas-groupby,Python,Python 3.x,Pandas,Pandas Groupby,我有一个数据框,我想做一些更改。以下是一个示例: d = {'username': ['a', 'a', 'b', 'a', 'a'], 'state': ['AR', 'AZ', 'CA', 'CO', 'NY'], 'status': ['ADD', 'ADD', 'REMOVE', 'ADD', 'REMOVE']} df = pd.DataFrame(data=d) 我知道如何通过群交加入美国: df = df.fillna('').groupby(['userna
d = {'username': ['a', 'a', 'b', 'a', 'a'],
'state': ['AR', 'AZ', 'CA', 'CO', 'NY'],
'status': ['ADD', 'ADD', 'REMOVE', 'ADD', 'REMOVE']}
df = pd.DataFrame(data=d)
我知道如何通过群交加入美国:
df = df.fillna('').groupby(['username', 'status'], as_index=False)['state'] \
.apply(lambda x: ','.join(set(x))) \
.reset_index() \
.rename({0: 'state'}, axis=1)
但最终我得到了这样的东西,但仍然不是我所需要的:
username status state
a ADD AR,AZ,CO
a REMOVE NY
b REMOVE CA
我想制作这份最终报告:
有什么想法吗
多谢各位 您已接近,在
重置索引之前
使用:
或者通过以下方式将索引转换为列:
编辑:
如果由3列使用,则可以删除set
s的解决方案:
更改了示例数据以获得更好的解释:
d = {'username': ['a', 'a', 'b', 'a', 'a', 'a'],
'state': ['AR', 'AZ', 'CA', 'CO', 'NY', 'NY'],
'status': ['ADD', 'ADD', 'REMOVE', 'ADD', 'REMOVE','REMOVE']}
df = pd.DataFrame(data=d)
print (df)
username state status
0 a AR ADD
1 a AZ ADD
2 b CA REMOVE
3 a CO ADD
4 a NY REMOVE
5 a NY REMOVE <- added row
我们可以在此处使用自定义
aggfunc
:
piv = df.pivot_table(index='username', columns='status', values='state', aggfunc=','.join)
status ADD REMOVE
username
a AR,AZ,CO NY
b NaN CA
它太优雅了<代码>熊猫简而言之:)@ansev
df1 = (df.pivot_table(index='username',
columns='status',
values='state',
aggfunc=lambda x: ','.join(set(x)),
fill_value='')
.reset_index()
.rename_axis(None, axis=1))
print (df1)
username ADD REMOVE
0 a AZ,AR,CO NY
1 b CA
d = {'username': ['a', 'a', 'b', 'a', 'a', 'a'],
'state': ['AR', 'AZ', 'CA', 'CO', 'NY', 'NY'],
'status': ['ADD', 'ADD', 'REMOVE', 'ADD', 'REMOVE','REMOVE']}
df = pd.DataFrame(data=d)
print (df)
username state status
0 a AR ADD
1 a AZ ADD
2 b CA REMOVE
3 a CO ADD
4 a NY REMOVE
5 a NY REMOVE <- added row
df1 = (df.pivot_table(index='username',
columns='status',
values='state',
aggfunc=lambda x: ','.join(set(x)),
fill_value='')
.reset_index()
.rename_axis(None, axis=1))
print (df1)
username ADD REMOVE
0 a AZ,AR,CO NY
1 b CA
df1 = (df.drop_duplicates(['username','status','state'])
.pivot_table(index='username',
columns='status',
values='state',
aggfunc= ','.join,
fill_value='')
.reset_index()
.rename_axis(None, axis=1))
print (df1)
username ADD REMOVE
0 a AZ,AR,CO NY
1 b CA
piv = df.pivot_table(index='username', columns='status', values='state', aggfunc=','.join)
status ADD REMOVE
username
a AR,AZ,CO NY
b NaN CA