小编Sco*_*ton的帖子

如何在Pandas中的transpose()之后删除额外的行(或列)

在数据帧上使用转置后,总是有一个额外的行作为初始数据帧索引的余数,例如:

import pandas as pd

df = pd.DataFrame({'fruit':['apple','banana'],'number':[3,5]})
df
    fruit  number
0   apple       3
1  banana       5
df.transpose()
        0       1
fruit   apple  banana
number      3       5
Run Code Online (Sandbox Code Playgroud)

即使我没有索引:

df.reset_index(drop = True, inplace = True)
df
    fruit  number
0   apple       3
1  banana       5

df.transpose()
        0       1
fruit   apple  banana
number      3       5
Run Code Online (Sandbox Code Playgroud)

问题是当我将数据帧保存到csv文件时:

df.to_csv(f)
Run Code Online (Sandbox Code Playgroud)

这个额外的行保持在顶部,我每次都必须手动删除它.

这也行不通:

 df.to_csv(f, index = None)
Run Code Online (Sandbox Code Playgroud)

因为旧索引不再被视为索引(只是另一行......).

它也发生在我换向相反的方式,我有一个额外的列,我无法删除.

有小费吗?

python csv transpose pandas

6
推荐指数
2
解决办法
5060
查看次数

按名称列表在Pandas中切片多个列范围

我试图用两种不同的方法在Pandas数据框中选择多个列:

1)通过列号,例如,列1-3和列6以后.

2)通过列名列表,例如:

years = list(range(2000,2017))
months = list(range(1,13))
years_month = list(["A", "B", "B"])
for y in years:
    for m in months:
        y_m = str(y) + "-" + str(m)
        years_month.append(y_m)     
Run Code Online (Sandbox Code Playgroud)

然后,years_month将产生以下内容:

['A',
 'B',
 'C',
 '2000-1',
 '2000-2',
 '2000-3',
 '2000-4',
 '2000-5',
 '2000-6',
 '2000-7',
 '2000-8',
 '2000-9',
 '2000-10',
 '2000-11',
 '2000-12',
 '2001-1',
 '2001-2',
 '2001-3',
 '2001-4',
 '2001-5',
 '2001-6',
 '2001-7',
 '2001-8',
 '2001-9',
 '2001-10',
 '2001-11',
 '2001-12']
Run Code Online (Sandbox Code Playgroud)

也就是说,在这两种方法中,只加载名称在列表years_month中的列的最佳(或正确)方法是什么?

python slice pandas

6
推荐指数
1
解决办法
1万
查看次数

Python 数据框:在同一行中查找与不同列中定义的值相同的值

我有一个大 Pandas 数据框:

    Time      P     T   R   H  
00000.0 1004.6  12.2  96    12  
00001.0 1004.2  12.1  96    15  
00002.0 1003.5  11.9  96    21  
00003.0 1002.8  12.0  96    27  
00004.0 1002.0  12.1  96    34  
00005.0 1001.4  12.1  96    39  
00006.0 1000.3  12.2  96    48

00007.0  999.5  12.1  96    55  
00008.0  998.9  12.2  96    59  
00009.0  998.0  12.1  96    67  
00010.0  997.3  13.1  96    73  
00011.0  996.9  13.2  97    76 

00013.0  995.3  13.3  97    90  
00014.0  994.6  13.6  97    96  
00015.0  994.3 …
Run Code Online (Sandbox Code Playgroud)

python indexing if-statement dataframe pandas

6
推荐指数
1
解决办法
7803
查看次数

Pandas DataFrames:使用现有行中的计算来创建新行

如何通过按某些字段(在“国家”和“行业”示例中)分组并将数学应用到另一个字段(在“字段”和“值”示例中)来从现有DataFrame创建新行?

源数据帧

df = pd.DataFrame({'Country': ['USA','USA','USA','USA','USA','USA','Canada','Canada'],
                   'Industry': ['Finance', 'Finance', 'Retail', 
                                'Retail', 'Energy', 'Energy', 
                                'Retail', 'Retail'],
                   'Field': ['Import', 'Export','Import', 
                             'Export','Import', 'Export',
                             'Import', 'Export'],
                   'Value': [100, 50, 80, 10, 20, 5, 30, 10]})

    Country Industry    Field   Value
0   USA     Finance     Import  100
1   USA     Finance     Export  50
2   USA     Retail      Import  80
3   USA     Retail      Export  10
4   USA     Energy      Import  20
5   USA     Energy      Export  5
6   Canada  Retail      Import  30
7   Canada  Retail      Export  10
Run Code Online (Sandbox Code Playgroud)

目标数据框

净额=进口-出口

    Country Industry    Field …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

6
推荐指数
1
解决办法
241
查看次数

在熊猫数据框架上绘制堆积的条形图

这是我在pycon参加Wesley教程后第一次尝试使用Pandas库.

在对数据框进行了一些讨论后,我很高兴能够以我想要的方式按下数据,但是在绘制数据时遇到了麻烦.我想这也表明了我对matplotlib库的天真.

我所拥有的是pandas Series对象,包含以下数据.我想绘制一个带有col 1('file')的条形图作为垂直方向的标签.

sample data here:
http://pastebin.com/y2w0uJPQ 
Run Code Online (Sandbox Code Playgroud)

python pandas

5
推荐指数
1
解决办法
3879
查看次数

Python 数据帧中的滚动和累积标准偏差

是否有矢量化操作来计算 Python DataFrame 的累积和滚动标准偏差 (SD)?

例如,我想添加一个列 'c',它根据列 'a' 计算累积 SD,即在索引 0 中,由于 1 个数据点,它显示 NaN,在索引 1 中,它根据 2 个数据计算 SD积分等等。

同样的问题也适用于滚动 SD。有没有一种有效的方法来计算而不通过 df.itertuples() 进行迭代?

import numpy as np
import pandas as pd

def main():
    np.random.seed(123)
    df = pd.DataFrame(np.random.randn(10, 2), columns=['a', 'b'])
    print(df)

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

python dataframe standard-deviation pandas

5
推荐指数
2
解决办法
4866
查看次数

按列对数据帧多索引级别进行排序

#更新:pandas 版本 0.23.0 解决了这个问题

按列和索引级别的组合排序


我一直在努力解决这个问题,我怀疑有更好的方法。如何按索引级别名称“idx_0”、level=0 和按列“value_1”降序对以下数据帧进行排序,以便列“MyName”读取垂直“SCOTTBOSTON”。

import pandas as pd
import numpy as np
df = pd.DataFrame({'idx_0':[2]*6+[1]*5,
                   'idx_1':[6,4,2,10,18,5,11,1,7,9,3],
                   'value_1':np.arange(11,0,-1),
                   'MyName':list('BOSTONSCOTT')})

df = df.set_index(['idx_0','idx_1'])
df
Run Code Online (Sandbox Code Playgroud)

输出:

            MyName  value_1
idx_0 idx_1                
2     6          B       11
      4          O       10
      2          S        9
      10         T        8
      18         O        7
      5          N        6
1     11         S        5
      1          C        4
      7          O        3
      9          T        2
      3          T        1
Run Code Online (Sandbox Code Playgroud)

#例外输出使用:

df.sort_values(['value_1'], ascending=False)\
  .reindex(sorted(df.index.get_level_values(0).unique()), level=0)
Run Code Online (Sandbox Code Playgroud)

我怀疑有一种更简单的方法,无需重置索引

            MyName  value_1
idx_0 idx_1                
1     11         S        5
      1 …
Run Code Online (Sandbox Code Playgroud)

python multi-index dataframe pandas

5
推荐指数
1
解决办法
4009
查看次数

在 pandas 中使用 value_counts() 附加列

我有一个名为输出的数据框,如下所示:

   created_at
0  1/8/2017 0:00
1  1/8/2017 0:00
2  1/8/2017 0:00
3  1/8/2017 0:00
4  1/8/2017 0:00
5  1/8/2017 1:00
6  1/8/2017 2:00
7  1/8/2017 3:00
Run Code Online (Sandbox Code Playgroud)

我想计算特定时间在名为df3的数据框中出现的次数。结果如下:

1/8/2017 0:00    5
1/8/2017 1:00    1
1/8/2017 3:00    1
1/8/2017 2:00    1
Run Code Online (Sandbox Code Playgroud)

我想要的是将两个标题添加到 df3 中,称为created_atcount

我首先做的是从输出数据框中删除重复项并对值进行排序,得到如下结果:

   created_at
0  1/8/2017 0:00
5  1/8/2017 1:00
6  1/8/2017 2:00
7  1/8/2017 3:00
Run Code Online (Sandbox Code Playgroud)

现在我在输出数据框中添加了列,但得到的结果如下:

   created_at        count
0  1/8/2017 0:00     NaN
5  1/8/2017 1:00     NaN
6 …
Run Code Online (Sandbox Code Playgroud)

python append dataframe pandas

5
推荐指数
1
解决办法
2757
查看次数

根据两个数据框的最小值创建一个数据框 pandas python

我有两个不同大小的数据框。仅当第二个数据帧的值小于第一个数据帧的值时,我才想用第二个数据帧的值替换第一个数据帧的值。换句话说,我想找到每个位置的两个数据帧的最小值,以匹配两个数据帧的索引。

df1:

      A     B     C   
0     0     12    7  
1     15    20    0  
2     7     0     3  
Run Code Online (Sandbox Code Playgroud)

df2:

      A     B     C   
1     4     25    8  
2     0     0     5  
Run Code Online (Sandbox Code Playgroud)

结果 df:

      A     B     C   
0     0     12    7  
1     4     20    0  
2     0     0     3 
Run Code Online (Sandbox Code Playgroud)

python minimum pandas

5
推荐指数
1
解决办法
2763
查看次数

Dataframe聚合方法传递列表问题

这可能是一个错误,但是您对此 pandas 功能有何看法:

df = pd.DataFrame(np.arange(20).reshape(10,-1), columns=[*'AB'])

def f(x):
    print(type(x))

df.agg(f)
Run Code Online (Sandbox Code Playgroud)

输出:

<class 'pandas.core.series.Series'>
<class 'pandas.core.series.Series'>
A    None
B    None
dtype: object
Run Code Online (Sandbox Code Playgroud)

但是,如果我将 agg 方法中的函数调用包装在括号中,将单个函数作为列表传递。

df = pd.DataFrame(np.arange(20).reshape(10,-1), columns=[*'AB'])

def f(x):
    print(type(x))


df.agg([f])
Run Code Online (Sandbox Code Playgroud)

输出:

<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
      A     B
      f     f
0  None …
Run Code Online (Sandbox Code Playgroud)

python aggregate pandas

5
推荐指数
1
解决办法
139
查看次数