我有一个包含1000行和10列的pandas数据帧。我希望聚合行100-1000并用一行代替它们,其中indexvalue为'> 100',列值是每列的行100-1000的总和。有关简单方法的任何想法吗?提前致谢
说我有以下
a b c
0 1 10 100
1 2 20 100
2 3 60 100
3 5 80 100
我想用
替换它 a b c
0 1 10 100
1 2 20 100
>1 8 140 200
答案 0 :(得分:0)
您可以使用ix
或loc
,但会显示SettingWithCopyWarning
:
ind = 1
mask = df.index > ind
df1 = df[~mask]
df1.ix['>1', :] = df[mask].sum()
In [69]: df1
Out[69]:
a b c
0 1 10 100
1 2 20 100
>1 8 140 200
要设置它而不发出警告,您可以使用pd.concat
进行设置。由于两个移调而可能不优雅但有效:
ind = 1
mask = df.index > ind
df1 = pd.concat([df[~mask].T, df[mask].sum()], axis=1).T
df1.index = df1.index.tolist()[:-1] + ['>{}'.format(ind)]
In [36]: df1
Out[36]:
a b c
0 1 10 100
1 2 20 100
>1 8 140 200
一些示威:
In [37]: df.index > ind
Out[37]: array([False, False, True, True], dtype=bool)
In [38]: df[mask].sum()
Out[38]:
a 8
b 140
c 200
dtype: int64
In [40]: pd.concat([df[~mask].T, df[mask].sum()], axis=1).T
Out[40]:
a b c
0 1 10 100
1 2 20 100
0 8 140 200