假设我有一个包含列的数据框a,b并且c我想按列b升序排序数据帧,按列c降序排序,我该怎么做?
如何通过密钥访问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) 我有DataFrame专栏Sales.
如何根据Sales价值将其拆分为2 ?
首先DataFrame是数据,'Sales' < s第二个是'Sales' >= s
我有一个大型数据集,列出了全国不同地区的竞争产品.我希望通过使用这些新数据帧名称中的列值的迭代过程将此数据帧拆分为基于该区域的其他几个数据帧,以便我可以单独使用每个数据框 - 例如,按价格对每个区域中的信息进行排序以了解每个市场的情况如何.我已经给出了以下数据的简化版本:
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很陌生并且还在学习,所以如果实际上有一种不同的,更明智的方法来解决这个问题,我会非常乐于接受建议.
我有一个列表,每个条目都是公司名称
companies = ['AA', 'AAPL', 'BA', ....., 'YHOO']
Run Code Online (Sandbox Code Playgroud)
我想为列表中的每个条目创建一个新的数据帧.
就像是
(伪代码)
for c in companies:
c = pd.DataFrame()
Run Code Online (Sandbox Code Playgroud)
我已经找到了一种方法来做到这一点,但找不到它.有任何想法吗?
我有一个像下面这样的数据帧,我打算用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初学者,并且已经编写了一些基本脚本。我的最新挑战是根据每行中特定变量的值,将一个非常大的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) 询问之前使用的来源:
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) 我有以下数据框。
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)