目前,我正在研究熊猫数据框。面临与分组操作有关的问题。我的数据框是-
Name A Job B
A Online Govt 22
B Offline Pvt 50
C Others Other 33
A Others Govt 62
B Online Pvt 18
C Offline Other 35
A Offline Govt 53
B Online Pvt 75
C Others Other 74
我的最终输出应该是-
Name Offline Online Others Govt Pvt Other
A 53 20 62 1 0 0
B 50 18 75 0 1 0
C 35 74 33 0 0 1
我已完成以下代码-
data = pd.read_csv('/Users../pandas_data/abc1.csv')
df3 = data.groupby(['Name', 'A'])['B']\
.first()\
.unstack(fill_value='NA')\
.rename_axis(None, 1)
谢谢。
答案 0 :(得分:0)
您应该看一下熊猫的pivot_table
,在输出的第二部分中可以使用
pd.pivot_table(
data=df.drop(columns='A'),
index=['Name'],
columns=['Job'],
aggfunc=lambda x: int(len(x) > 0),
fill_value=0
)
会产生
B
Job Govt Other Pvt
Name
A 1 0 0
B 0 0 1
C 0 1 0
然后对第一部分进行类似的操作(不知道如何解释..
),例如
pd.pivot_table(
data=df.drop(columns='Job'),
index=['Name'],
columns=['A'],
aggfunc= # depends on what you expect
)
最后在axis=1
上使用concat
进行连接。
答案 1 :(得分:0)
我将使用pivot()获得第一部分, 第二部分使用get_dummies(),然后将它们连接到一个数据帧中,如下所示:
part1 = df.pivot(index="Name",columns="A",values="B")
part2 = df.groupby(["Name"])["Job"].first().str.get_dummies()
ans = pd.concat([part1, part2], axis=1)