我想创建一个包含两列的pandas数据帧,第一列是我的一列的唯一值,第二列是唯一值的计数.
我已经看到很多帖子(例如这里)描述了如何获取计数,但我遇到的问题是当我尝试创建数据帧时,列值成为我的索引.
样本数据:df = pd.DataFrame({'Color': ['Red', 'Red', 'Blue'], 'State': ['MA', 'PA', 'PA']}).我想最终得到一个数据帧,如:
Color Count
0 Red 2
1 Blue 1
Run Code Online (Sandbox Code Playgroud)
我尝试过以下操作,但在所有情况下,索引最终都是Color,而Count是数据框中唯一的列.
尝试1:
df2 = pd.DataFrame(data=df['Color'].value_counts())
# And resetting the index just gets rid of Color, which I want to keep
df2 = df2.reset_index(drop=True)
Run Code Online (Sandbox Code Playgroud)
尝试2:
df3 = df['Color'].value_counts()
df3 = pd.DataFrame(data=df3, index=range(df3.shape[0]))
Run Code Online (Sandbox Code Playgroud)
尝试3:
df4 = df.groupby('Color')
df4 = pd.DataFrame(df4['Color'].count())
Run Code Online (Sandbox Code Playgroud) 有人可以给我一个清晰,简单的最大熵分类的定义吗?如果有人可以提供一个清晰的类比,这将非常有帮助,因为我正努力理解。
有没有办法numpy在 Mac上安装,以便在上传到 AWS Lambda 时可以正常工作?我尝试了各种不同的方法,包括使用不同的pip版本、使用easy_install和关注这篇文章,但它们似乎都不起作用。我也尝试克隆 git repo 并从那里构建,但我也无法让它工作(尽管我不确定这样做后是否复制了正确的文件)
我得到的错误是:
无法导入模块“lambda_function”:导入多阵列 numpy 扩展模块失败。很可能您正在尝试导入失败的 numpy 构建。如果您正在使用 numpy git repo,请尝试
git clean -xdf(删除所有不受版本控制的文件)。否则重新安装numpy。
受这篇文章的启发,我能够pip install numpy在 Linux 环境中运行 Lambda。
所以我的问题是:是否可以numpy在 Mac上安装以便它在 AWS Lambda 上运行?
环境:MacBook Pro,MacOS 10.12.2,默认python版本2.7.10
我一直在hello-world-python对 Lambda上的示例稍作修改:
from __future__ import print_function
import numpy
def lambda_handler(event, context):
#print("Received event: " + json.dumps(event, indent=2))
print("value1 = " + event['key1'])
Run Code Online (Sandbox Code Playgroud)
(更新)扩展问题:为什么有些包可以工作而有些则不行?
我想对每个组的前 N 期数据求和。我已经看到了如何单独执行每个操作(按组求和,或对前 N 个周期求和),但无法找到一种将两者一起执行的干净方法。
我目前正在做以下事情:
import pandas as pd
sample_data = {'user': ['a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'b'],\
'clicks': [0,1,2,3,4,5,6,7,8,9]}
df = pd.DataFrame(sample_data)
df['clicks.1'] = df.groupby(['user'])['clicks'].shift(1)
df['clicks.2'] = df.groupby(['user'])['clicks'].shift(2)
df['clicks.3'] = df.groupby(['user'])['clicks'].shift(3)
df['total_clicks_prior3'] = df[['clicks.1','clicks.2', 'clicks.3']].sum(axis=1)
Run Code Online (Sandbox Code Playgroud)
我不想要 3 个中间滞后列,我只想要它们的总和,所以我想要的输出是:
>>> df[['clicks','user','total_clicks_prior3']]
clicks user total_clicks_prior3
0 0 a NaN
1 1 a 0.0
2 2 a 1.0
3 3 a 3.0
4 4 a 6.0
5 5 b NaN
6 6 b 5.0
7 …Run Code Online (Sandbox Code Playgroud) 我有两个数据帧:
set.seed(343)
testDF <- data.frame(Score = sample(50, size=50, replace=TRUE), number = rep(letters[1:25],2), Rev = rep(0,50))
sourceDF <- data.frame(min = c(1,10,20,30,40), max = c(9, 19, 29, 39, 50), rev = 1:5)
Run Code Online (Sandbox Code Playgroud)
对于testDF的每一行,其中testDF $得分在sourceDF $ min和sourceDF的sourceDF $ max之间,请将testDF $ Rev的值替换为相应的sourceDF $ rev.
我有它使用两个for循环和一个if条件,但它是......慢(我的数据集有接近100万行).我尝试使用findInterval但没有成功.
有没有更好/更有效的方法来做到这一点?
这似乎应该很容易,但我从来没有弄清楚如何做到这一点.使用data.table我想C通过另一列对一列进行求和A,并保留这两列.同时,我希望能够命名新列.我的尝试和期望的输出:
library(data.table)
dt <- data.table(A= c('a', 'b', 'b', 'c', 'c'), B=c('19', '20', '21', '22', '23'),
C=c(150,250,20,220,130))
# Desired Output - is there a way to do this in one step using data.table? #
new.data <- dt[, sum(C), by=A]
setnames(new.data,'V1', 'C.total')
new.data
A C.total
1: a 150
2: b 270
3: c 350
# Attempt 1: Problem is that columns B and C kept, extra rows kept #
new.data <- dt[, 'C.total' := sum(C), by=A] …Run Code Online (Sandbox Code Playgroud) 我使用igraph包来查找每个节点的程度(内置degree(g)函数),它返回一个数字向量.如何判断哪个节点具有最大程度(不是值而是节点名称)?
我是R的初学者.我正在参加Coursera R编程课程,我被困在一个作业(污染物意味着家庭作业).作业的目的是从csv文件中的列中获取方法.这些文件有四列.我们有300多个文件,每个文件有1000多个观察结果.他们中的大多数都是NA.在我正在使用的csv文件中,只有117个数字观察.我一直在尝试这样的东西:
cmydata1 <- read.csv("/Users/joshuavincent/Documents/specdata/001.csv")
Run Code Online (Sandbox Code Playgroud)
一旦我有cmydata1,我试图得到其中一个列的平均值,"硝酸盐",但我得到了这个:
> mean(cmydata1, "nitrate")
[1] NA
Warning message:
In mean.default(cmydata1, "nitrate") :
argument is not numeric or logical: returning NA
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题,我创建了一个这样的新列表:
> cmydata2 <- list(na.omit(cmydata1))
> cmydata2[[1]]
Run Code Online (Sandbox Code Playgroud)
结果是清洁的矩阵,不再是NA
列名称为:"Date""sulfate""nitrate"和ID.
但是,我仍然无法得到平均值
> mean(cmydata2, "nitrate")
[1] NA
Warning message:
In mean.default(cmydata2, "nitrate") :
argument is not numeric or logical: returning NA
Run Code Online (Sandbox Code Playgroud)
我尝试修复它,所以我输入...并获得null
> colnames(cmydata2)
NULL
Run Code Online (Sandbox Code Playgroud)
那么,我可以修复什么来获得该列的平均值?(之后我觉得必须尝试循环和东西才能完成作业,但我会迈向宝贝的步骤)
请注意,这可能有所帮助:我在自动填充中有一个带有表格图标的cmydata1,而cmydata2有一些形状,看起来像一个organigram图标.
谢谢
我用%*%来表示矩阵及其反函数.我没有得到单位矩阵.我错过了什么?
D
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 2 1
[3,] 2 2 0
solve(D)
[,1] [,2] [,3]
[1,] -0.1428571 0.4285714 -0.2857143
[2,] 0.1428571 -0.4285714 0.7857143
[3,] 0.2857143 0.1428571 -0.4285714
D %*% solve(D)
[,1] [,2] [,3]
[1,] 1.000000e+00 0.000000e+00 -2.220446e-16
[2,] -5.551115e-17 1.000000e+00 0.000000e+00
[3,] -1.110223e-16 -1.110223e-16 1.000000e+00
Run Code Online (Sandbox Code Playgroud) r ×5
python ×3
pandas ×2
aws-lambda ×1
data.table ×1
dataframe ×1
entropy ×1
group-by ×1
igraph ×1
rename ×1