小编N08*_*N08的帖子

如何合并具有相同列名的列表以获得它们的联合

假设我有N个列表,它们都具有相同的列名.我想合并这些,以便我得到一个具有相同列的结果列表,但现在包含所有N列表中的条目.这是一个显示我想要的MWE:

  ls<-list()
ls[[1]]<-list("a"=1,
              "b"=2)
    ls[[2]]<-list("a"=3,
                  "b"=4)

#how to write a one-liner that produces lsTotal, which is the union of ls[[1]] and ls[[2]]?

lsTotal<-list("a"=c(1,3),
              "b"=c(2,4))  
Run Code Online (Sandbox Code Playgroud)

我发现了这个线程,我可以使用它Map(c, ls[[1]], ls[[2]]).然而,如果ls很长的话,写出来是很乏味的.有捷径吗?

r list nested-lists

8
推荐指数
1
解决办法
354
查看次数

将 pandas 写入 SQL 时指定 NOT NULL

我正在使用 SQLAlchemy 创建一个表,如下所示:

import sqlalchemy

df.to_sql(table_name, engine, schema='dbo', 
          index=True, index_label='IdColumn', 
          if_exists='replace',
          dtype={'IdColumn': sqlalchemy.types.VARCHAR(length=255)})
Run Code Online (Sandbox Code Playgroud)

是否可以指定dtypes应该IdColumnnot null?上面写入dfSQL 服务器,但默认给出IdColumn类型。(varchar(255), null)

python sqlalchemy pandas

7
推荐指数
0
解决办法
1504
查看次数

基于内连接连接字符串

我有两个包含相同列的DataFrame; an id,a date和a str:

df1 = pd.DataFrame({'id':      ['1', '2', '3', '4', '10'], 
                    'date':    ['4', '5', '6', '7', '8'],
                    'str':     ['a', 'b', 'c', 'd', 'e']})

df2 = pd.DataFrame({'id':      ['1', '2', '3', '4', '12'], 
                    'date':    ['4', '5', '6', '7', '8'],
                    'str':     ['A', 'B', 'C', 'D', 'Q']})
Run Code Online (Sandbox Code Playgroud)

我想在iddate列上加入这两个数据集,并创建一个结果列,它是以下的连接str:

df3 = pd.DataFrame({'id':      ['1',  '2',   '3',  '4', '10', '12'], 
                    'date':    ['4',  '5',   '6',  '7', '8',  '8'],
                    'str':     ['aA', 'bB', 'cC', 'dD', 'e', 'Q']})
Run Code Online (Sandbox Code Playgroud)

我想我可以进行内部连接然后连接字符串,但有没有更简单的方法来实现这一点?

python join dataframe pandas

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

通过与列表进行比较来过滤掉 panda-df 的行

经常出现以下问题。假设我有一个数据框,其中一列可以采用离散值:

df = pd.DataFrame({'col1': [1, 2,3,4,5,6,7], 'col2': ["A", "B", "A", "C", "B", "A", "D"]})
Run Code Online (Sandbox Code Playgroud)

在这种情况下,col2可取的值A,B或C.我只想行,其中col2 等于A或B.我想下面的语法会的工作,

df["col2"] not in ["A", "B"]
Run Code Online (Sandbox Code Playgroud)

但是,这给了我错误 ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

有没有一种巧妙的方法来过滤掉这些行?

python pandas

6
推荐指数
1
解决办法
1828
查看次数

使用 GridSearchCV 提前停止 - 使用保留的 CV 集进行验证

early-stopping我想在 scikit-learns -方法中使用 - 选项GridSearchCVSO- thread中显示了一个这样的示例:

import xgboost as xgb
from sklearn.model_selection import GridSearchCV

trainX= [[1], [2], [3], [4], [5]]
trainY = [1, 2, 3, 4, 5]

testX = trainX 
testY = trainY

param_grid = {"subsample" : [0.5, 0.8],
              "n_estimators" : [600]}

fit_params = {"early_stopping_rounds":1,
             "eval_set" : [[testX, testY]]}


model = xgb.XGBRegressor()
gridsearch = GridSearchCV(estimator  = xgb.XGBRegressor(), 
                          param_grid=param_grid,
                          fit_params=fit_params,                          
                          verbose=1,                          
                          cv=2)
gridsearch.fit(trainX,trainY)
Run Code Online (Sandbox Code Playgroud)

但是,我想使用交叉验证过程的保留集作为验证集。有没有办法在 中指定这一点GridSearchCV

python scikit-learn grid-search xgboost

5
推荐指数
1
解决办法
8446
查看次数

搜索多个字符串以查找多个单词

我有一个包含每行句子的数据帧.我需要在这些句子中搜索某些单词的出现.这就是我目前的做法:

import pandas as pd

p = pd.DataFrame({"sentence" : ["this is a test", "yet another test", "now two tests", "test a", "no test"]})

test_words = ["yet", "test"]
p["word_test"] = ""
p["word_yet"]  = ""

for i in range(len(p)):
    for word in test_words:
        p.loc[i]["word_"+word] = p.loc[i]["sentence"].find(word)
Run Code Online (Sandbox Code Playgroud)

这可以按预期工作,但是,是否可以对此进行优化?对于大型数据帧,它运行速度相当慢

python dataframe pandas

5
推荐指数
3
解决办法
47
查看次数

dplyr:传递列名以总结函数内部

我有以下示例,其中我将一个简单的数据帧传递给一个总结列的函数。我想将汇总列的名称s作为函数的参数:

df <- data.frame(id = c(1,1,1,1,1,2,2,2,2,2),
                 a=c(1:10),
                 b=c(10:19))

sum <- function(df, s){
  df <- df %>% 
    group_by(id) %>%
    summarize(s = sum(a))
  return(df)
}

sum(df = df, s = "summarizing.column.label")
Run Code Online (Sandbox Code Playgroud)

但是,无论我设置什么值,summarizing-column 总是获得相同的 name s。有办法改变它吗?


编辑:我想要的输出是:

sum(df = df, s = "summarizing.column.label")

         id     summarizing.column.label
      <dbl> <int>
    1  1.00    15
    2  2.00    40

sum(df = df, s = "a")

         id     a
      <dbl> <int>
    1  1.00    15
    2  2.00    40
Run Code Online (Sandbox Code Playgroud)

r dataframe dplyr

4
推荐指数
1
解决办法
3125
查看次数

改变字典的所有键

是否可以重命名/更改字典的所有键?举个例子,我们来看看下面的字典:

a_dict = {'a_var1': 0.05,
          'a_var2': 4.0,
          'a_var3': 100.0,  
          'a_var4': 0.3}
Run Code Online (Sandbox Code Playgroud)

我想删除所有的a_密钥,所以我最终得到了

a_dict = {'var1': 0.05,
          'var2': 4.0,
          'var3': 100.0,  
          'var4': 0.3}
Run Code Online (Sandbox Code Playgroud)

python dictionary

3
推荐指数
1
解决办法
51
查看次数

在 Rcpp 中循环嵌套列表

我有以下嵌套列表,我想使用 Rcpp 循环:

nested_list <- list("a"=list("a_a","a_b","a_c"), 
                    "b"=list("b_a", "b_b", "b_c"))
Run Code Online (Sandbox Code Playgroud)

这是我的尝试:

#include <Rcpp.h>
#include <iostream>
using namespace Rcpp;


// [[Rcpp::export]]
CharacterVector names_get( Rcpp::List y ){
  return y.names() ;
}

// [[Rcpp::export]]
void output( Rcpp::List y ){

  for(const auto &i : names_get(y))
  {
    Rcpp::List tmp = y[std::string(i)];

    for(const auto &j : integer_names_get(tmp))
      std::cout << j << "\n";
}
Run Code Online (Sandbox Code Playgroud)

它编译得很好,但是当我运行它时output(nested_list)出现错误Error in output(nested_list) : not compatible with STRSXP

这个错误是什么意思,它在哪里/为什么出现?

r rcpp

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

Groupby 和展平列表

我有一个具有以下形式的 pandas 数据框:

import pandas as pd
p = pd.DataFrame({"int" : [1,     1,     1,     1,     2,      2],
                  "cod" : [[1,1], [2,2], [1,2], [3,9], [2,2], [2,2]]})
Run Code Online (Sandbox Code Playgroud)

我想要 group by int,它给了我一堆列表。然后我想展平这些列表,所以我最终得到一个具有以下形式的数据框:

p = pd.DataFrame({"int" :  [1,                2],
                  "cod" : [[1,1,2,2,1,2,3,9], [2,2,2,2]]})
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所拥有的:

p.groupby("int", as_index=False)["cod"]
Run Code Online (Sandbox Code Playgroud)

一旦我分组,我就陷入了如何展平的困境int

python pandas

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

根据标识符覆盖列中的NaN

我有一个数据框,NaN在-column中包含一些值t.t-column中的值属于某个值,id并且应该相同id:

df = pd.DataFrame({"t"  :   [4, 4, 1, 1, float('nan'), 2, 2, 2, float('nan'), 10],
                   "id":    [1, 1, 2, 2, 3, 3, 3 , 3, 4, 4]})
Run Code Online (Sandbox Code Playgroud)

因此,我想覆盖 NaNt与非NaNt用于相应的id与最终结束了

df = pd.DataFrame({"t"  :   [4, 4, 1, 1, 2, 2, 2, 2, 10, 10],
                   "id":    [1, 1, 2, 2, 3, 3, 3 , 3, 4, 4]})
Run Code Online (Sandbox Code Playgroud)

python pandas

0
推荐指数
1
解决办法
36
查看次数