【问题标题】:summing up certain rows in a panda dataframe总结熊猫数据框中的某些行
【发布时间】:2016-02-08 04:19:24
【问题描述】:

我有一个包含 1000 行和 10 列的 pandas 数据框。我正在寻找聚合第 100-1000 行并将它们替换为仅索引值为“> 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

【问题讨论】:

标签: python-3.x pandas


【解决方案1】:

您可以使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    • 2018-04-25
    • 2018-09-19
    • 2016-08-02
    • 1970-01-01
    相关资源
    最近更新 更多