相关疑难解决方法(0)

如何通过两列或更多列对python pandas中的dataFrame进行排序?

假设我有一个包含列的数据框a,b并且c我想按列b升序排序数据帧,按列c降序排序,我该怎么做?

python sorting data-analysis python-2.7 pandas

205
推荐指数
3
解决办法
23万
查看次数

如何按键访问pandas groupby dataframe

如何通过密钥访问groupby对象中的相应groupby数据帧?使用以下groupby:

rand = np.random.RandomState(1)
df = pd.DataFrame({'A': ['foo', 'bar'] * 3,
                   'B': rand.randn(6),
                   'C': rand.randint(0, 20, 6)})
gb = df.groupby(['A'])
Run Code Online (Sandbox Code Playgroud)

我可以遍历它以获取密钥和组:

In [11]: for k, gp in gb:
             print 'key=' + str(k)
             print gp
key=bar
     A         B   C
1  bar -0.611756  18
3  bar -1.072969  10
5  bar -2.301539  18
key=foo
     A         B   C
0  foo  1.624345   5
2  foo -0.528172  11
4  foo  0.865408  14
Run Code Online (Sandbox Code Playgroud)

我希望能够做类似的事情

In [12]: gb['foo']
Out[12]:  
     A         B   C
0  foo  1.624345   5
2  foo …
Run Code Online (Sandbox Code Playgroud)

python group-by dataframe pandas pandas-groupby

134
推荐指数
5
解决办法
16万
查看次数

Pandas按列值拆分DataFrame

我有DataFrame专栏Sales.

如何根据Sales价值将其拆分为2 ?

首先DataFrame是数据,'Sales' < s第二个是'Sales' >= s

python indexing split dataframe pandas

51
推荐指数
5
解决办法
8万
查看次数

Python - 根据列值将数据帧拆分为多个数据帧,并使用这些值命名

我有一个大型数据集,列出了全国不同地区的竞争产品.我希望通过使用这些新数据帧名称中的列值的迭代过程将此数据帧拆分为基于该区域的其他几个数据帧,以便我可以单独使用每个数据框 - 例如,按价格对每个区域中的信息进行排序以了解每个市场的情况如何.我已经给出了以下数据的简化版本:

Competitor  Region  ProductA  ProductB
Comp1       A       £10       £15
Comp1       B       £11       £16
Comp1       C       £11       £15
Comp2       A       £9        £16
Comp2       B       £12       £14
Comp2       C       £14       £17
Comp3       A       £11       £16
Comp3       B       £10       £15
Comp3       C       £12       £15
Run Code Online (Sandbox Code Playgroud)

我可以使用以下内容创建区域列表:

region_list=df['Region'].unique().tolist()
Run Code Online (Sandbox Code Playgroud)

我希望在一个产生大量数据帧的迭代循环中使用它,例如

df_A :

Competitor  Region  ProductA  ProductB
Comp1       A       £10       £15
Comp2       A       £9        £16
Comp3       A       £11       £16
Run Code Online (Sandbox Code Playgroud)

我可以使用代码手动为每个区域执行此操作

df_A=df.loc[df['Region']==A]
Run Code Online (Sandbox Code Playgroud)

但实际情况是,这个数据集有很多区域会使这段代码繁琐.有没有办法创建一个可以复制它的迭代循环?有一个类似的问题,询问有关拆分数据帧的问题,但答案并未说明如何根据每个列值标记输出.

我对Python很陌生并且还在学习,所以如果实际上有一种不同的,更明智的方法来解决这个问题,我会非常乐于接受建议.

python dataframe pandas

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

循环创建多个数据帧

我有一个列表,每个条目都是公司名称

companies = ['AA', 'AAPL', 'BA', ....., 'YHOO']
Run Code Online (Sandbox Code Playgroud)

我想为列表中的每个条目创建一个新的数据帧.

就像是

(伪代码)

for c in companies:
     c = pd.DataFrame()
Run Code Online (Sandbox Code Playgroud)

我已经找到了一种方法来做到这一点,但找不到它.有任何想法吗?

python dataframe pandas

16
推荐指数
4
解决办法
5万
查看次数

将数据帧列拆分为Pandas中的相等窗口

我有一个像下面这样的数据帧,我打算用size = 30每个数据块提取窗口,然后为每个数据块写入循环,并调用其他函数.

index = pd.date_range(start='2016-01-01', end='2016-04-01', freq='D')
data = pd.DataFrame(np.random.rand(len(index)), index = index, columns=['random'])
Run Code Online (Sandbox Code Playgroud)

我找到了以下功能,但我想知道是否有更有效的方法.

def split(df, chunkSize = 30): 
    listOfDf = list()
    numberChunks = len(df) // chunkSize + 1
    for i in range(numberChunks):
        listOfDf.append(df[i*chunkSize:(i+1)*chunkSize])
    return listOfDf 
Run Code Online (Sandbox Code Playgroud)

python split chunks dataframe pandas

4
推荐指数
2
解决办法
1710
查看次数

使用Python根据特定列拆分CSV文件

我是Python初学者,并且已经编写了一些基本脚本。我的最新挑战是根据每行中特定变量的值,将一个非常大的csv文件(10gb +)分成多个较小的文件。

例如,该文件可能如下所示:

Category,Title,Sales
"Books","Harry Potter",1441556
"Books","Lord of the Rings",14251154
"Series", "Breaking Bad",6246234
"Books","The Alchemist",12562166
"Movie","Inception",1573437
Run Code Online (Sandbox Code Playgroud)

我想将文件拆分为单独的文件:Books.csv,Series.csv,Movie.csv

实际上,将有数百种类别,并且不会对其进行排序。在这种情况下,它们位于第一列,但将来可能不在。

我在网上找到了一些解决方案,但是在Python中却没有。有一个非常简单的AWK命令可以在一行中完成此操作,但是我无法在工作中访问AWK。

我编写了以下有效的代码,但我认为它可能效率很低。有人可以建议如何加快速度吗?

import csv

#Creates empty set - this will be used to store the values that have already been used
filelist = set()

#Opens the large csv file in "read" mode
with open('//directory/largefile', 'r') as csvfile:

    #Read the first row of the large file and store the whole row as a string (headerstring)
    read_rows = csv.reader(csvfile)
    headerrow = next(read_rows)
    headerstring=','.join(headerrow) 

    for …
Run Code Online (Sandbox Code Playgroud)

python csv

4
推荐指数
2
解决办法
2076
查看次数

根据列值拆分数据框并导出到不同的 Excel 工作表

询问之前使用的来源:

Pandas:遍历 DataFrame 列表并将每个导出到 Excel 表

将数据帧拆分为多个数据帧

我设法做到了这一切:

# sort the dataframe
df.sort(columns=['name'], inplace=True)
# set the index to be this and don't drop
df.set_index(keys=['name'], drop=False,inplace=True)
# get a list of names
names=df['name'].unique().tolist()
# now we can perform a lookup on a 'view' of the dataframe
joe = df.loc[df.name=='joe']
# now you can query all 'joes'
Run Code Online (Sandbox Code Playgroud)

我设法完成了这项工作 -joe = df.loc[df.name=='joe']它给出了我正在寻找的确切结果。

作为使其适用于大量数据的解决方案,我发现了这个潜在的解决方案。

writer = pandas.ExcelWriter("MyData.xlsx", engine='xlsxwriter')
List = [Data , ByBrand]
for i in List:
        i.to_excel(writer, sheet_name= i)
writer.save() …
Run Code Online (Sandbox Code Playgroud)

python excel python-3.x pandas

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

如果所有行都是 nan,则将 pandas 数据帧拆分为多个数据帧

我有以下数据框。

       a          b           c          d
0   4.65  30.572857  133.899994  23.705000
1   4.77  30.625713  134.690002  23.225000
2   4.73  30.138571  132.250000  23.040001
3   5.07  30.082857  130.000000  23.290001
4   4.98  30.282858  133.520004  23.389999
5    NaN        NaN         NaN        NaN
6   4.82  29.674286  127.349998  23.700001
7   4.83  30.092857  129.110001  24.254999
8   4.85  29.918571  127.349998  24.695000
9   4.70  29.418571  127.139999  24.424999
10  4.69  30.719999  127.610001  25.200001
11   NaN        NaN         NaN        NaN
12  4.43  29.724285  126.620003  24.764999
13   NaN        NaN         NaN        NaN
14  4.29  29.010000  120.309998  24.730000 …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

0
推荐指数
1
解决办法
1462
查看次数