标签: dataframe

r - 使用列位置的dplyr full_join

我以下数据帧:

a <- c(1,1,1)
b<- c(10,8,2)
c<- c(2,2)
d<- c(3,5)

AB<- data.frame(a,b)
CD<- data.frame(c,d)
Run Code Online (Sandbox Code Playgroud)

我想加入AB和CD,其中第一列CD等于AB的第二列.请注意,我的实际数据将有不同数量的列,名称各不相同,所以我真的在寻找一种基于位置加入的方法.我一直在尝试这个:

#Get the name of the last column in AB
> colnames(AB)[ncol(AB)]
[1] "b"
#Get the name of the first column in CD
> colnames(CD)[1]
[1] "c"
Run Code Online (Sandbox Code Playgroud)

然后我尝试像这样加入:

> abcd <- full_join(AB, CD, by = c(colnames(AB)[ncol(AB)]=colnames(CD)[1]))
Error: unexpected '=' in "abcd <- full_join(AB, CD, by = c(colnames(AB)[ncol(AB)]="
Run Code Online (Sandbox Code Playgroud)

我正在寻找的行为基本上是这样的:

> abcd<- full_join(AB, CD, by = c("b" = "c"))
> abcd
  a  b  d
1 1 10 NA …
Run Code Online (Sandbox Code Playgroud)

merge r dataframe dplyr

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

将一串空格分隔的单词拆分为多行

我有这个暗网数据,数据如下所示:origin列包含一行中的多个国家/地区.

df = pd.DataFrame({'Item': ['Weapons', 'Drugs', 'Data'], 'Origin': ['US UK AUS', 'US', 'Canada']})
Run Code Online (Sandbox Code Playgroud)

我试图将第一行转换为多行.在这种情况下,三个!

df = pd.DataFrame({'Item': ['Weapons', 'Weapons', 'Weapons','Drugs', 'Data'], 'Origin': ['US', 'UK', 'AUS', 'US', 'Canada']})
Run Code Online (Sandbox Code Playgroud)

有没有我可以使用的简单代码?

如果不是这样,我怎么能使它成为可能?

python string split dataframe pandas

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

Pandas根据布尔条件选择行和列

我有一个大约50列和> 100行的pandas数据帧.我想选择列'col_x','col_y'在哪里'col_z' < m.有一个简单的方法来做到这一点,类似于df[df['col3'] < m]df[['colx','coly']],但结合起来呢?

python conditional dataframe pandas

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

将Pandas数据帧分组一列,根据另一列删除行

我有一个pandas数据框,如下所示:

     UNIT        MACHINE
1    a100        001
2    a100        002
3    a100        003
4    a100        001
5    b222        001
6    b222        002
7    b222        002
8    b222        003
Run Code Online (Sandbox Code Playgroud)

我想基于"UNIT"对其进行分组,并删除没有[001,002,003]"MACHINE"序列的行.这意味着因为UNIT"a100"具有序列[001,002,003,001],所以它应该被丢弃,但UNIT"b222"仍然存在,因为无论MACHINE 002的重复如何,序列都是正确的.

输出应如下所示:

     UNIT        MACHINE
5    b222        001
6    b222        002
7    b222        002
8    b222        003
Run Code Online (Sandbox Code Playgroud)

序列[001,002,003]是我在这里作为例子编写的可接受的MACHINE序列之一.有几种这样的序列,所有这些序列都是单调递增的.

我应该如何组合GroupBy并执行此操作?

python group-by dataframe pandas pandas-groupby

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

多索引DataFrame中按级别求和的列

我的DF具有多索引列。我所有的值都在float中,并且我想在第一级多索引中合并值。请参阅下面的详细信息。

first        bar                 baz                 foo   
second       one       two       one       two       one    
A       0.895717  0.805244  1.206412  2.565646  1.431256    
B       0.410835  0.813850  0.132003  0.827317  0.076467    
C       1.413681  1.607920  1.024180  0.569605  0.875906 

first        bar                 baz                 foo   

A       (0.895717+0.805244) (1.206412+2.565646)  1.431256    
B       (0.410835+0.813850) (0.132003+0.827317)  0.076467    
C       (1.413681+1.607920) (1.024180+0.569605)  0.875906 
Run Code Online (Sandbox Code Playgroud)

值实际上是添加的(我只是不想做所有这些事情:)。最重要的是,我只想升级(我猜是更高的级别),并在索引内添加所有值。请让我知道执行此操作的好方法。谢谢!

python sum multi-index dataframe pandas

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

如何格式化基于在使用XlsxWriter另一片对应单元值在一个表中的所有细胞?

我正在DataFrames使用XlsxWriter 将两个熊猫导出到Excel ,每个熊猫DataFrame都有一个单独的工作表。我想根据另一张纸中的值将一种颜色格式应用于一张纸中的所有单元格,它们基于列名和行号一对一地对应。

例:

Sheet1

  A B C
1 1 3 1
2 0 4 2

Sheet2

  A B C
1 a d b
2 b a a
Run Code Online (Sandbox Code Playgroud)

我想为Sheet1中所有在Sheet2中具有值“ a”的单元格分配一种颜色格式。

python excel dataframe pandas xlsxwriter

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

在Shiny Application中过滤数据时,除第一个元素外,长度为1的所有字符向量都会被忽略错误

我有以下闪亮的应用程序:

library(shiny)
library(rhandsontable)
library(shinydashboard)
library(ggplot2)
library(dplyr)

setwd("C:/Users/Marc/Dropbox/PROJECTEN/Lopend/shiny_interactive_graph")

tweets <- data.frame(
  city = c("new york", "texas", "texas"),
  tweet = c("Test1", "Test", "tst")
)


shinyApp(
  ui = dashboardPage(
    dashboardHeader(
      title = "Tweetminer",
      titleWidth = 350
    ),
    dashboardSidebar(
      width = 350,
      sidebarMenu(
        menuItem("Menu Item")
      )
    ),
    dashboardBody(
      fluidRow(
        tabBox(
          tabPanel("Set tweets2", 
                   plotOutput('plot',
                              brush = brushOpts(
                                id = "plot1_brush"
                              )),
                   h4("Selected States"),
                   verbatimTextOutput("select_states"),
                   h4("Selected States' Tweets"),
                   verbatimTextOutput("tweets")
          )
        )
      )
    )
  ),
  server = function(input, output) { 

    output$plot <- renderPlot({

      all_states <- map_data("state") 
      # …
Run Code Online (Sandbox Code Playgroud)

r modal-dialog dataframe shiny

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

使用dataframe.apply在每列上调用唯一函数

我一直想做下面的工作,以便有一个简单的故事,用于pandas.DataFrame.someColumnName.unique()在一个内的每一列上执行函数pandas.DataFrame.

df.apply(func=unique, axis=0)  # error NameError: name 'unique' is not defined
Run Code Online (Sandbox Code Playgroud)

是否有一些技巧我忽略了这个工作或替代解决方案给出以下类似的东西,但type()pandas.DataFrame工作中的每个列使用功能.

df.apply(func=lambda x: type(x[0]), axis=0)
Run Code Online (Sandbox Code Playgroud)

请注意,我已经能够进行以下工作,但似乎不是python中的单行for循环的方式,我发现apply语句是一个更好的自我记录实现.

for col in df.columns: 
    df[col].unique()
Run Code Online (Sandbox Code Playgroud)

python unique apply dataframe pandas

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

在单个组中进行所有聚合还是单独进行?

我需要在PySpark代码中对大型数据集进行大量聚合(大约9-10).我可以通过两种方式接近它:

单一组:

df.groupBy(col1, col2).agg({"col3":"sum", "col4":"avg", "col5":"min", "col6":"sum", "col7":"max", "col8":"avg", "col9":"sum"})
Run Code Online (Sandbox Code Playgroud)

分组并加入

temp1 = df.groupBy(col1, col2).agg({"col3":"sum"})
temp2 = df.groupBy(col1, col2).agg({"col4":"avg"})
temp3 = df.groupBy(col1, col2).agg({"col5":"min"})
.
.
.
temp9 = df.groupBy(col1, col2).agg({"col9":"sum"})
Run Code Online (Sandbox Code Playgroud)

然后加入所有这9个数据帧以获得最终输出.

哪一个会更有效率?

performance dataframe apache-spark apache-spark-sql pyspark

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

使用%in%过滤列表中的多列并在R中过滤

好了,所以这里是我的想象data.framedata

A1 A2 A3  A4  A5  A6     
1  2  45  35  33  38  
5  1  23  33  58  47
18 26 78  15  5   6
Run Code Online (Sandbox Code Playgroud)

我想要做的是选择任何列中包含1或33的所有行

所以我最初的想法是编写以下代码

a <- paste0("A",1:6)
num <- c("1","33")

data <- data %>%
  filter(a %in% num)
Run Code Online (Sandbox Code Playgroud)

直觉上我虽然这会工作,但我一直得到错误结果必须有长度_不_.

我可以用任何方式绕过这个或使用不同的解决方案吗?谢谢!

r filter dataframe dplyr

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