我有一个包含单列ID的数据框,所有其他列都是我想要计算z分数的数值.这是它的一个小节:
ID Age BMI Risk Factor
PT 6 48 19.3 4
PT 8 43 20.9 NaN
PT 2 39 18.1 3
PT 9 41 19.5 NaN
Run Code Online (Sandbox Code Playgroud)
我的一些列包含NaN值,我不想将其包括在z-score计算中,所以我打算使用提供给这个问题的解决方案:如何使用nans来规范化pandas列?
df['zscore'] = (df.a - df.a.mean())/df.a.std(ddof=0)
Run Code Online (Sandbox Code Playgroud)
我有兴趣将此解决方案应用于除ID列之外的所有列,以生成新的数据框,我可以将其保存为Excel文件
df2.to_excel("Z-Scores.xlsx")
Run Code Online (Sandbox Code Playgroud)
所以基本上; 如何计算每列的z分数(忽略NaN值)并将所有内容推送到新的数据框中?
SIDENOTE:熊猫中有一个叫做"索引"的概念让我感到恐惧,因为我不太了解它.如果索引是解决此问题的关键部分,请愚蠢地解释索引.
我想用R和plot.ly制作一些交互式图形.当我在R-Studio中运行以下代码时,它会生成一个交互式图形.
library(plotly)
set.seed(100)
d <- diamonds[sample(nrow(diamonds), 1000), ]
plot_ly(d, x = carat, y = price, text = paste("Clarity: ", clarity),
mode = "markers", color = carat, size = carat)
Run Code Online (Sandbox Code Playgroud)
生成此图形后,当我单击R-Studio的"绘图"窗口中的"导出"按钮时,它为我提供了将绘图保存为网页的选项.如何编写将生成的图表保存为网页的过程?我的最终目标是从bash脚本中迭代运行Rscripts以生成多个网页.
我有一个包含许多NaN值的DataFrame.我想删除包含太多NaN值的行; 具体来说:7个或更多.
我尝试了几种方法使用dropna函数,但似乎很清楚它贪婪地删除包含任何 NaN值的列或行.
这个问题(Slice Pandas DataFrame by Row)告诉我,如果我可以编译一个包含太多NaN值的行的列表,我可以用一个简单的方法将它们全部删除
df.drop(rows)
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用count函数计算非空值,我可以从总数中减去并以这种方式获得NaN计数(是否有直接计算连续NaN值的方法?).但即便如此,我也不确定如何编写一个逐行遍历DataFrame的循环.
这是我认为正确的一些伪代码:
### LOOP FOR ADDRESSING EACH row:
m = total - row.count()
if (m > 7):
df.drop(row)
Run Code Online (Sandbox Code Playgroud)
我仍然是熊猫的新手,所以我对解决这个问题的其他方法非常开放; 他们是更简单还是更复杂.
我正在尝试编写一个脚本,在单个图像中生成四个不同的图.具体来说,我想尽可能地重新创建这个图形:
我当前的脚本生成了四个类似于这些的图,但我无法弄清楚如何相应地分配屏幕空间.我想要:
生成一些数据
pt_id = c(1:279) # DEFINE PATIENT IDs
smoke = rbinom(279,1,0.5) # DEFINE SMOKING STATUS
hpv = rbinom(279,1,0.3) # DEFINE HPV STATUS
data = data.frame(pt_id, smoke, hpv) # PRODUCE DATA FRAME
Run Code Online (Sandbox Code Playgroud)
添加解剖学站点数据
data$site = sample(1:4, 279, replace = T)
data$site[data$site == 1] = "Hypopharynx"
data$site[data$site == 2] = "Larynx"
data$site[data$site == 3] = "Oral Cavity"
data$site[data$site == 4] = "Oropharynx"
data$site_known = 1 # HACK TO FACILITATE PRODUCING BARPLOTS
Run Code Online (Sandbox Code Playgroud)
添加变异频率数据
data$freq = sample(1:1000, 279, replace …Run Code Online (Sandbox Code Playgroud) 我在第一列中有两个具有相同列名和相同 ID 的数据框。除了 ID 列之外,在一个 DataFrame 中包含值的每个单元格在另一个 DataFrame 中都包含 NaN。以下是它们的外观示例:
ID Cat1 Cat2 Cat3
1 NaN 75 NaN
2 61 NaN 84
3 NaN NaN NaN
ID Cat1 Cat2 Cat3
1 54 NaN 44
2 NaN 38 NaN
3 49 50 53
Run Code Online (Sandbox Code Playgroud)
我想将它们合并到一个 DataFrame 中,同时保持相同的列名。所以结果应该是这样的:
ID Cat1 Cat2 Cat3
1 54 75 44
2 61 38 84
3 49 50 53
Run Code Online (Sandbox Code Playgroud)
我试过:
df3 = pd.merge(df1, df2, on='ID', how='outer')
Run Code Online (Sandbox Code Playgroud)
这给了我一个包含两倍列数的 DataFrame。如何将每个 DataFrame 中的值合并为一个?
我对paste()函数的行为方式感到困惑.我有一个包含以下列的dplyr表:
Year Month DayofMonth
2001 May 21
2001 May 22
2001 June 9
2001 March 4
Run Code Online (Sandbox Code Playgroud)
我想将它组合成一个名为"Date"的列.我想我已经使用了这个命令:
df2 = mutate(df, Date = paste(c(Year, Month, DayofMonth), sep = "-",))
Run Code Online (Sandbox Code Playgroud)
不幸的是,这似乎连接了Year中的每个元素,然后是Month中的每个元素,然后是DayofMonth中的每个元素,所以结果看起来像这样:
2001-2001-2001-2001 ... May-May-June-March ... 21-22-9-4
Run Code Online (Sandbox Code Playgroud)
我应该如何修改我的命令,以便粘贴函数分别迭代每一行?
PS这是Data Camp课程的一部分,因此我通过他们的服务器上的任何R版本运行命令.
我正在编写一个R脚本,并希望定义一个变量,以便在绘图注释中用作文件名的一部分.我以为我会使用strsplit()函数.这是我的代码和输出:
infile = "ACC_1346.table.txt"
x = strsplit(infile, ".")
class(infile)
[1] "character"
class(x)
[1] "list"
str(x)
List of 1
$ : chr [1:18] "" "" "" "" ...
x[[1]]
[1] "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
Run Code Online (Sandbox Code Playgroud)
我预计最终的输出是:
[1] "ACC_1346" "table" "txt"
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
我有一个散列,其中键是字符串,值是一位数字; 这是一段哈希:
'f92a0d43-a230-4bfd-b580-9eac5e0ce6cf' => 7,
'26c4b622-969f-4861-bbab-dd506ea4b00a' => 1,
'afb1f925-4109-4b1d-967f-3958106e0bc3' => 3,
'a099a6dc-0c66-4683-94c3-29d6ef6947fd' => 1,
'e71c4860-224d-4b8d-ae9e-4700e9e65a97' => 2,
Run Code Online (Sandbox Code Playgroud)
我想按降序值的顺序打印键.因此对于那里列出的切片,输出将是:
'f92a0d43-a230-4bfd-b580-9eac5e0ce6cf' => 7
'afb1f925-4109-4b1d-967f-3958106e0bc3' => 3
'e71c4860-224d-4b8d-ae9e-4700e9e65a97' => 2
'26c4b622-969f-4861-bbab-dd506ea4b00a' => 1
'a099a6dc-0c66-4683-94c3-29d6ef6947fd' => 1
Run Code Online (Sandbox Code Playgroud)
具有相同值的键的顺序无关紧要.这个问题的答案: 在Perl中,如何打印对应于散列中最大值的键? 建议使用sort函数; 我有:
my @values = sort { $b <=> $a } values %ID_hash;
Run Code Online (Sandbox Code Playgroud)
我遇到的问题实际上是按顺序打印键.
我试过了:
foreach(@values) {
my $cur = $_;
print "$ID_hash{$cur}\t$cur\n";
}
Run Code Online (Sandbox Code Playgroud)
哪个失败是因为我提供的是价值而不是钥匙.
我知道我总是可以将键/值对打印为制表符分隔文件并使用Unix版本的排序,但我确信有一种方法可以使用Perl.任何帮助都感激不尽.
我有一个我想在文件中找到的字符串列表.如果列表中和文件中的字符串完全匹配,这将非常简单.不幸的是,名称上存在拼写错误和变体.以下是其中一些字符串有所不同的示例
List File
B-Arrestin Beta-Arrestin
Becn-1 BECN 1
CRM-E4 CRME4
Run Code Online (Sandbox Code Playgroud)
请注意,尽管是不同的字符串,但每个对都应算作匹配.我知道我可以对各种变化进行分类,并编写单独的REGEX来识别匹配,但这很麻烦,我可能最好手动寻找匹配.我认为我的问题的最佳解决方案是某种表达方式:
"完全匹配此字符串,但如果有不匹配的X字符,则仍将其视为匹配"
这样的事情存在吗?是否有另一种方法来匹配不完全相同但接近的字符串?
我正在迭代一些数据,创建ggplot我想在单个图像上一起打印的图形列表.我的代码有两个循环,一个在另一个循环中.外循环根据一个变量细分数据.内部循环进一步细分数据并为每个细分生成散点图; 这些图保存在列表中.一旦内部循环完成,就会使用像这样的列表对象创建grid.arrange对象(注意:此代码包含一个自定义函数,my_scatter在此问题的底部共享):
require(ggplot2)
require(grid)
require(gridExtra)
PRIMARY LOOP STRUCTURE {
...
my_plots = list()
for (j in c(1:length(my_nodes))){
cur_node = my_nodes[j]
node_dat = temp_dat[temp_dat$Node == cur_node,]
p = my_scatter(node_dat, "PRE", "POST") + geom_point(aes(color = Node, shape = Recurrence_Type, size = 2))
my_plots[[j]] = p
}
grid.arrange(my_plots[[1]],my_plots[[2]],my_plots[[3]],my_plots[[4]],my_plots[[5]], nrow = 4, ncol = 3)
}
Run Code Online (Sandbox Code Playgroud)
问题是对于循环的一些迭代,my_plots将具有不同数量的元素.我知道我可以通过一系列条件语句来解决这个问题:
if (length(my_plots) == 2) {
grid.arrange(my_plots[[1]],my_plots[[2]],nrow=1,ncol=2)
} elsif ( length(my_plots == 3) {
grid.arrange(my_plots[[1]],my_plots[[2]],nrow=2,ncol=2)
} elsif...
Run Code Online (Sandbox Code Playgroud)
但这似乎很麻烦,我希望找到一个不那么生硬的解决方案.通常情况下我会用facet_grid()这种东西,但是当散射图被扭曲成facet_grid产生的超过2或3个图时产生的超薄矩形时很难解释.
我看到,这个问题 …