标签: data-wrangling

既然 Pandas .append() 方法已被弃用,那么它是替代 Pandas 的好方法吗?

我经常使用以下方法将单行附加到数据帧。我真正喜欢它的一件事是它允许您附加一个简单的 dict 对象。例如:

# Creating an empty dataframe
df = pd.DataFrame(columns=['a', 'b'])

# Appending a row
df = df.append({ 'a': 1, 'b': 2 }, ignore_index=True)
Run Code Online (Sandbox Code Playgroud)

同样,我最喜欢的一点是代码非常干净并且只需要很少的行。现在我想推荐的替代方案是:

# Create the new row as its own dataframe
df_new_row = pd.DataFrame({ 'a': [1], 'b': [2] })
df = pd.concat([df, df_new_row])
Run Code Online (Sandbox Code Playgroud)

因此,之前的一行代码现在变成了两行,其中包含一个一次性变量和额外的内容,我在其中创建新的数据框。:( 有没有一种好方法可以做到这一点,只需使用像我过去那样的字典(未弃用)?

python dataframe pandas data-munging data-wrangling

156
推荐指数
5
解决办法
19万
查看次数

如何交换R中的列和行条目

library(data.table)
dat1 <- data.table(id = c(1, 2, 34, 99),
           class = c("sports", "", "music, sports", ""),
           hobby = c("knitting, music, sports", "", "", "music"))
> dat1
  id         class                   hobby
1  1        sports knitting, music, sports
2  2                                      
3 34 music, sports                        
4 99                                 music
Run Code Online (Sandbox Code Playgroud)

我有上面的数据集 ,dat1其中每一行对应一个唯一的id. 对于每个,或id的多个输入以逗号分隔。classhobby

我想交换此数据集的行和列,以便得到以下内容:

     input class hobby
1   sports 1, 34     1
2 knitting           1
3    music    34 1, 99
Run Code Online (Sandbox Code Playgroud)

在此数据集中,每一行对应一个唯一的inputfrom dat1。现在classhobby …

r data.table data-wrangling

17
推荐指数
3
解决办法
671
查看次数

如何总结保留所有列的数据框

考虑以下数据框:

\n
dummy_df <- tibble(\n  A=c("ABC", "ABC", "BCD", "CDF", "CDF", "CDF"),\n  B=c(0.25, 0.25, 1.23, 0.58, 0.58, 0.58),\n  C=c("lorem", "ipsum", "dolor", "amet", "something", "else"),\n  D=c("up", "up", "down", "down", "down", "down"),\n  E=c(132, 132, 243, 512, 512, 512),\n  F=c("m1", "m1", "m5", "m3", "m3", "m3"),\n  G=c("val", "val", "mur", "mad", "mad", "mad"),\n  H=c("grx", "grx", "bcn", "sal", "sal", "sal"),\n  I=c(1.68, 1.68, 2.31, 3.12, 3.12, 3.12),\n  J=c("p", "p", "f", "p", "p", "p"),\n  K=c(100, 100, 200, 143, 143, 143)\n)\n\n# A tibble: 6 \xc3\x97 11\n  A         B C         D …
Run Code Online (Sandbox Code Playgroud)

group-by aggregate r dplyr data-wrangling

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

R:更改pivot_wider() 中的列名——前缀的后缀

我试图弄清楚如何改变 tidyrpivot_wider()函数在生成的宽数据集中创建新变量名称的方式。具体来说,我希望将“names_from”变量添加到新变量的前缀而不是后缀。

我的数据集看起来像:

list(ID = c("A950", "A950", "A950", "A970", "A970", "A970", "A996", "A996", "A996"), 
Phase = c("P1", "P2", "P3", "P1", "P2", "P3", "P1", "P2", "P3"), 
A = c(23.5, 25.2, 21.9, 21.9, 21.1, 20.3, 19.5, 18.7, 17.9), 
B = c(21.9, 21.1, 20.3, 19.5, 18.7, 17.9, 17.1, 16.3, 15.5), 
C = c(25.2, 21.9, 20.3, 17.6, 15.1, 12.7, 10.3, 7.8, 5.4), 
D = c("M", "M", "M", "F", "F", "F", "N", "N", "N"))
Run Code Online (Sandbox Code Playgroud)

当我使用pivot_wider()Phase 作为“关键”来传播数据集时,我的结果如下所示:

ex_wide <- ex_long %>%
  pivot_wider(names_from …
Run Code Online (Sandbox Code Playgroud)

r reshape tidyr data-wrangling

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

Pandas 中的数据操作:从列上的值创建一个布尔列,然后用另一列中的值填充

好的,我已经尝试了太久了,是时候寻求帮助了。我有一个看起来有点像这样的数据框:

  person  fruit   quantity    all_fruits
0 p1      grapes  2           [grapes, banana]
1 p1      banana  1           [grapes, banana]
2 p2      apple   4           [apple, banana, peach]
3 p2      banana  4           [apple, banana, peach]
4 p2      peach   2           [apple, banana, peach]
5 p3      grapes  1           [grapes]
6 p4      banana  1           [banana]
7 p5      apple   3           [apple, peach]
8 p5      peach   2           [apple, peach]
Run Code Online (Sandbox Code Playgroud)

然后我有一个“感兴趣的水果”列表:

Fruits_of_interest: ['苹果', '香蕉']

我需要做的是:

  1. 为每个感兴趣的水果创建一个列,并为第 1 列(人)上的每个人指定她是否有那个水果

  2. 对于第 1 列中的每个人,指定该人在该水果列下感兴趣的水果数量的 log(1+x)

我正在努力完成这项工作!我的实际数据框非常大,接近 80 万行,并且“感兴趣的水果”列表有 300 多个“水果”,这无济于事。

对于第一部分,我使用了这个函数,并且可以获取所有带有布尔值的列,以显示是否有水果:

def has_fruit(fruit, …
Run Code Online (Sandbox Code Playgroud)

python function dataframe pandas data-wrangling

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

朱莉娅。将一列汇总到具有多列的新 DataFrame 中

我需要按一个变量对数据框进行分组,然后通过添加相对于另一个变量的 0.25、.5、0.75 分位数的数字或行(我已经可以这样做)和列数对其进行汇总。

在 RI 中会做例如:

    iris %>%
       group_by(Species) %>%
       summarise(
          quantile(Sepal.Length, c(.25, .75)) %>%
             matrix(nrow = 1) %>%
             as.data.frame() %>%
             setNames(paste0("Sepal.Length", c(.25, .75)))
    )
Run Code Online (Sandbox Code Playgroud)

使用 DataFrames 和 DataFrameMeta 在 Julia 中编写此代码的简洁方法是什么?如果有一个解决方案可以将它一次应用于多个列,那就更好了。

我能在 Julia 中找到的最接近的解决方案是:

groupby(iris, :Species) |>
   x -> combine(x, :Sepal.Length => x -> [[map(p -> quantile(x, p), (Q25 = 0.25, Q75 = 0.75))] |> DataFrame])
Run Code Online (Sandbox Code Playgroud)

但它只是将数据帧封装到一个单元格中,而它应该将其分散到多列中。

dataframe julia data-wrangling

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

如何根据不同列的值创建新列并计算 R 中另一个数字列的百分比值?

示例数据框:

no <- rep(1:5, each=2)
type <- rep(LETTERS[1:2], times=5)
set.seed(4)
value <- round(runif(10, 10, 30))

df <- data.frame(no, type, value)
Run Code Online (Sandbox Code Playgroud)
df

    no type value
1   1    A    22
2   1    B    10
3   2    A    16
4   2    B    16
5   3    A    26
6   3    B    15
7   4    A    24
8   4    B    28
9   5    A    29
10  5    B    11
Run Code Online (Sandbox Code Playgroud)

现在我想要的是计算每种类型(A 或 B)的 % 值并创建单独的列。期望的输出是这样的:

 no    pct_A    pct_B total_value
1  1 68.75000 31.25000          32
2  2 …
Run Code Online (Sandbox Code Playgroud)

r dataframe dplyr data-wrangling

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

在 R 中将完整年龄从字符转换为数字

我有一个数据集,其中人们的完整年龄为 R 中的字符串(例如,“10 年 8 个月 23 天)”,我需要将其转换为有意义的数字变量。我正在考虑将其转换为有多少天人的年龄(这很困难,因为月份有不同的天数)。因此,最好的解决方案可能是创建一个双变量,将年龄显示为 10.6 或 10.8,一些数字变量携带 10 年 8 个月 5 天大于的信息10年7月12天。

这是我当前变量的示例

library(tibble)

age <- tibble(complete_age = 
             c("10 years 8 months 23 days",
               "9 years 11 months 7 days",
               "11 years 3 months 1 day",
               "8 years 6 months 12 days")) 

age

# A tibble: 4 x 1
  complete_age             
  <chr>                    
1 10 years 8 months 23 days
2 9 years 11 months 7 days 
3 11 years 3 months 1 day  
4 8 years …
Run Code Online (Sandbox Code Playgroud)

r lubridate stringr data-cleaning data-wrangling

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

使用 dplyr 跨多列进行变异

我正在尝试计算多列的行平均值。有人可以解释为什么下面的代码只计算代码中两个变量(var_1 和 var_13)的平均值,而不是所有 13 列的平均值吗?

df %>% 
rowwise() %>%
  mutate(varmean = mean(var_1:var_13)) -> df
Run Code Online (Sandbox Code Playgroud)

r dplyr data-wrangling

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

Pandas:按组标准化值

我发现很难用语言解释我想要实现的目标,所以请不要因为我展示了一个简单的例子而评判我。我有一个看起来像这样的表:

主列 一些元数据 价值
真的 10
错误的 3
真的 50
错误的 10
其他 真的 20
其他 错误的 5

我想针对 的每种情况分别标准化这些数据main_col。例如,如果我们选择最小-最大归一化并将其缩放到范围 [0; 100],我希望输出如下所示:

主列 一些元数据 值(标准化)
真的 100
错误的 30
真的 100
错误的 20
其他 真的 100
其他 错误的 25

其中对于 的每种情况main_col,最高值缩放为 100,另一个值按相应比例缩放。

python dataframe pandas data-science data-wrangling

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