给出pandas中的以下数据帧:
import numpy as np
df = pandas.DataFrame({"a": np.random.random(100), "b": np.random.random(100), "id": np.arange(100)})
Run Code Online (Sandbox Code Playgroud)
其中id是由以下组成的每个点的ID a和b值,哪能仓a和b成一组指定的仓(这样我可以再取中值/平均值a和b每个仓中)? 对于任何给定的行,df可能具有或(或两者)的NaN值.谢谢.abdf
这是一个更好的例子,使用Joe Kington的解决方案和更逼真的df.我不确定的是如何访问下面每个df.a组的df.b元素:
a = np.random.random(20)
df = pandas.DataFrame({"a": a, "b": a + 10})
# bins for df.a
bins = np.linspace(0, 1, 10)
# bin df according to a
groups = df.groupby(np.digitize(df.a,bins))
# Get the mean of a in each group
print groups.mean()
## But …Run Code Online (Sandbox Code Playgroud) 我有一个数据框,想要按一系列值过滤或分组,然后获取每个bin中的值计数.
目前,我这样做:
x = 5
y = 17
z = 33
filter_values = [x, y, z]
filtered_a = df[df.filtercol <= x]
a_count = filtered_a.filtercol.count()
filtered_b = df[df.filtercol > x]
filtered_b = filtered_b[filtered_b <= y]
b_count = filtered_b.filtercol.count()
filtered_c = df[df.filtercol > y]
c_count = filtered_c.filtercol.count()
Run Code Online (Sandbox Code Playgroud)
但有没有更简洁的方法来完成同样的事情?
我在文件夹中有多个CSV文件,其值如下:
GroupID.csv是文件名.有这样的多个文件,但值范围在同一XML文件中定义.我正在尝试将它们分组我该怎么做?
更新1:根据BobHaffner的评论,我已经做到了
import pandas as pd
import glob path =r'path/to/files'
allFiles = glob.glob(path + "/*.csv")
frame = pd.DataFrame()
list_ = []
for file_ in allFiles:
df = pd.read_csv(file_,index_col=None, header=None)
df['file'] = os.path.basename('path/to/files/'+file_)
list_.append(df)
frame = pd.concat(list_)
print frame
Run Code Online (Sandbox Code Playgroud)
得到这样的东西:
我需要根据XML文件中的bin对值进行分组.我真的很感激任何帮助.
试图用今天的日期减去created_date列填充一列,但出现以下错误:TypeError:-的不支持的操作数类型:'str'和'str'
import datetime
now = datetime.date.today()
today = '{0:%m/%d/%Y}'.format(now).format(now)
today
data['Aging'] = today
data['Aging'] = data['Aging'].sub(data['Created_Date'], axis=0)
Run Code Online (Sandbox Code Playgroud)
TypeError:-:'str'和'str'不支持的操作数类型
我正在尝试编写一个函数,该函数通过一个充满浮点数的 Pandas df 系列,并根据它们在系列范围内的位置将它们转换为四个字符串分类变量之一。因此,范围四分位数中的所有值都将转换为低、低中、高中或高。我已经完成了多种方法,但不断收到各种错误消息。最新的尝试及其消息如下。如果有人可以偷看并抛出任何想法/修复,我将不胜感激。谢谢!
def makeseriescategorical(x):
for i in x:
if i < 59863.0:
str(i)
i.replace(i, "low")
elif i > 59862.0 and i < 86855.0:
str(i)
i.replace(i, "low_mid")
elif i > 86854.0 and i < 125250.0:
str(i)
i.replace(i, "high_mid")
elif i > 125249.0 and i < 332801:
str(i)
i.replace(i, "high")
Run Code Online (Sandbox Code Playgroud)
我在最后一次尝试中得到的错误消息是:AttributeError: 'numpy.float64' object has no attribute 'replace'
我尝试了各种其他方法来使其成为字符串,例如 astype,但我不断收到错误消息。我是编码新手,所以我确信我犯了一个愚蠢的错误的可能性很大,但我很感激任何人能给我的任何帮助。干杯。
数据框
pd.DataFrame({'a': range(20)})
>>
a
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
13 13
14 14
15 15
16 16
17 17
18 18
19 19
Run Code Online (Sandbox Code Playgroud)
预期结果:
a group_num
0 0 1
1 1 1
2 2 2
3 3 2
4 4 3
5 5 3
6 6 4
7 7 4
8 8 5
9 9 5
10 10 …Run Code Online (Sandbox Code Playgroud)