标签: dataframe

对另一列的每个级别内的数据框中的单个列重新排序

可能这个问题的解决方案很容易,但我看不到它.这是我的示例数据框:

df <- data.frame(id=c(1,1,1,2,2,2), value=rep(1:3,2), level=rep(letters[1:3],2))
df[6,2] <- NA
Run Code Online (Sandbox Code Playgroud)

这是我想要创建的所需输出:

df$new_value <- c(3,2,1,NA,2,1)
Run Code Online (Sandbox Code Playgroud)

因此,所有列的顺序都相同,对于new_value列,value列顺序在列的每个级别内反转id.有任何想法吗?谢谢!

r dataframe

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

如何对pyspark数据框中的列值求和

我在Pyspark工作,并且有一个包含以下各列的数据框。

Q1 = spark.read.csv("Q1final.csv",header = True, inferSchema = True)
Q1.printSchema()

root
|-- index_date: integer (nullable = true)
|-- item_id: integer (nullable = true)
|-- item_COICOP_CLASSIFICATION: integer (nullable = true)
|-- item_desc: string (nullable = true)
|-- index_algorithm: integer (nullable = true)
|-- stratum_ind: integer (nullable = true)
|-- item_index: double (nullable = true)
|-- all_gm_index: double (nullable = true)
|-- gm_ra_index: double (nullable = true)
|-- coicop_weight: double (nullable = true)
|-- item_weight: double (nullable = true)
|-- cpih_coicop_weight: double …
Run Code Online (Sandbox Code Playgroud)

sum dataframe apache-spark pyspark

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

熊猫read_json()失败,返回一个简单的JSON字符串

我正在尝试DataFrame从json字符串(不是文件)创建对象:

json_string = "[{'code': '8', 'name': 'Human'}, {'code': '11', 'name': 'Orc'}]"
df = pd.read_json(json_string)
Run Code Online (Sandbox Code Playgroud)

但是这种方法会导致以下错误:

ValueError: Expected object or value
Run Code Online (Sandbox Code Playgroud)

文档使听起来像是可能的:

熊猫 read_jsonpath_or_buf = None,orient = None,typ ='frame',dtype = True,convert_axes = True,convert_dates = True,keep_default_dates = True,numpy = False,precision_float = False,date_unit = None,编码=无,线= False,chunksize = None,compression ='infer'

将JSON字符串转换为pandas对象

  • path_or_buf:有效的JSON字符串或类似文件的字符串,默认值: 字符串可以是URL。有效的URL方案包括http,ftp,s3和file。对于文件URL,需要一个主机。例如,本地文件可以是file://localhost/path/to/table.json

我已经尝试使用的几种组合调用该方法orient,但均未成功。有关如何完成此操作的任何提示?

我真的不希望将字符串保存到文件中的开销能够read_json()成功使用。

python json dataframe pandas

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

检查pandas DataFrame列中的字符串中是否包含字符串

我有一个非常简单的pandas DataFrame,我想选择DataFrame中在其中包含另一个字符串的列中具有数据的部分

因此,如果这是我的DataFrame并且我想要包含some在该Loc列中的那些列,该怎么做?

             Loc 
0      'something'  
1      'nothing'  
Run Code Online (Sandbox Code Playgroud)

我尝试了两件事:

df['some' in df['Loc']]
df[df.Loc.contains('some')]
Run Code Online (Sandbox Code Playgroud)

但是,两种解决方案都行不通。

python dataframe pandas

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

使用if将复制行压缩为唯一行

所以有一种情况:

数据帧:

dat <- data.frame(colA = rep(c(0,1,0), c(6,1,8)), 
                  colB = rep(c(1,0,1,0), c(1,4,1,9)), 
                  colC = rep(c(0,1,0), c(9,1,5)), 
                  colD = rep(c(0,1,0), c(8,1,6)), 
                  colE = rep(0, 15), 
                  color = rep(c("blue","red","yellow"), each=5), 
                  colorId = rep(c(22,40,35), each=5))

colA   colB    colC    colD   colE   color   colorId
0      1       0       0      0      Blue    22
0      0       0       0      0      Blue    22
0      0       0       0      0      Blue    22
0      0       0       0      0      Blue    22
0      0       0       0      0      Blue    22
0      1       0       0      0      Red …
Run Code Online (Sandbox Code Playgroud)

r conditional-statements dataframe

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

在pandas中具有运行编号的新列,有条件地递增

题:

给定一个包含如下数据的数据框:

>>> df
    data
0  START
1   blah
2   blah
3   blah
4   blah
5    END
6  START
7   blah
8   blah
9    END
Run Code Online (Sandbox Code Playgroud)

分配具有每次递增的运行数的新列的最有效方法是什么START?这是我想要的结果:

>>> df
    data  number
0  START       1
1   blah       1
2   blah       1
3   blah       1
4   blah       1
5    END       1
6  START       2
7   blah       2
8   blah       2
9    END       2
Run Code Online (Sandbox Code Playgroud)

我做了什么

这很好,但速度很慢(这将适用于更大的数据帧,我相信有更好的方法可以做到这一点:

counter = 0
df = df.assign(number = 0)
for i, row in df.iterrows():
    if row['data'] == …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

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

计算R中的滚动差

我正在尝试在数据集中进行滚动差异.我有这样一张桌子:

Year  Count
2017  5
2017  6
2017  7
2017  6
2017  8
Run Code Online (Sandbox Code Playgroud)

我想得到一个差异列,从第5行开始计算.所以它看起来像这样

Index  Count  Diff
1      5      NA
2      6      NA
3      7      NA
4      6      NA
5      8      NA
6      3      -2
7      4      -2
8      9      2
9      2      -4
10     1      -7
Run Code Online (Sandbox Code Playgroud)

现在我只是将count列子集化并与零结合进行计算.这样做有更整洁的方法吗?

这就是我现在正在做的事情:

a <- df$Count[1:5]
b <- rep(0,5)
df$Count1 <- c(b,a)
df$Diff <- df$Count - df$Count1
Run Code Online (Sandbox Code Playgroud)

r calculated-columns dataframe

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

在Spark CSV中转义换行符读取

我正在使用Spark 2.2.1版本并使用以下python代码,可以转义@等特殊字符:我想转义特殊字符,例如newline(\ n)和回车(\ r)。我替换了\ n的@,但是没有用。有任何建议请。

工作方式:

spark_df = spark.read.csv(file.csv,mode="DROPMALFORMED",inferSchema=True,header =True,escape="@")
Run Code Online (Sandbox Code Playgroud)

不起作用:

spark_df = spark.read.csv(file.csv,mode="DROPMALFORMED",inferSchema=True,header =True,escape="\n")
Run Code Online (Sandbox Code Playgroud)

python dataframe apache-spark pyspark

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

Pandas布尔数据帧搜索返回False但应为True

问题

我正在尝试搜索pandas数据帧以查找单个值.我正在搜索的数据帧列是float64类型.

工作实例

这是我想要的一个工作示例,其数据框的类型为int64.

myseries = pd.Series([1,4,0,7,5], index=[0,1,2,3,4])
myseries
Run Code Online (Sandbox Code Playgroud)

输出如下:

0    1
1    4
2    0
3    7
4    5
dtype: int64
Run Code Online (Sandbox Code Playgroud)

现在搜索:

myseries == 4
Run Code Online (Sandbox Code Playgroud)

结果:

0    False
1     True
2    False
3    False
4    False
dtype: bool
Run Code Online (Sandbox Code Playgroud)

不工作的例子

这是我的数据样本.

df['difference']
Run Code Online (Sandbox Code Playgroud)

结果

0    -2.979296
1    -0.423903
2     0.396515
...
48    0.450493
49   -1.216324
Name: priceDiff1, dtype: float64
Run Code Online (Sandbox Code Playgroud)

如您所见,它的类型为float64.现在这是问题所在.如果我复制第2行的值,并像之前一样创建条件语句,则不会返回True.

df['difference'] == 0.396515
Run Code Online (Sandbox Code Playgroud)

产量

0     False
1     False
2     False
...
48    False
49    False
Name: priceDiff1, dtype: bool
Run Code Online (Sandbox Code Playgroud)

第2行应为True.在这个问题上对此问题的任何帮助都会很棒.我认为正在发生的是,我的查询没有将类型设置为float64,并且可能假设它是一个不同的类型.我已经通过将列类型从float64向下转换为float32进行了测试,没有运气.

python search dataframe pandas

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

如何在给定的datetime值restiriction下填充数据框中的列?

鉴于熊猫数据框架df1df2:

df1:

                           d  v
0 2018-02-16 13:39:55.562506  1
1 2018-02-16 10:18:56.768246  4
Run Code Online (Sandbox Code Playgroud)

并且df2:

                           d   vx
0 2018-02-16 13:39:56.668377  100
1 2018-02-16 14:01:05.766319  200
Run Code Online (Sandbox Code Playgroud)

如何df1使用vx值扩展df2,以便时间戳几乎相同,即值的差异不超过2秒(和NaN不匹配)?

例:

                           d  v     vx
0 2018-02-16 10:18:56.768246  4    NaN
1 2018-02-16 13:39:55.562506  1  100.0
Run Code Online (Sandbox Code Playgroud)

以下是代码:

import pandas as pd
import datetime as dt

dt1 = dt.datetime(2018, 2, 16, 13, 39, 55, 562506)
dt2 = dt.datetime(2018, 2, 16, 10, 18 , 56, …
Run Code Online (Sandbox Code Playgroud)

python fuzzy-comparison dataframe python-datetime pandas

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