可能这个问题的解决方案很容易,但我看不到它.这是我的示例数据框:
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
.有任何想法吗?谢谢!
我在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) 我正在尝试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_json(path_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()
成功使用。
我有一个非常简单的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)
但是,两种解决方案都行不通。
所以有一种情况:
数据帧:
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) 题:
给定一个包含如下数据的数据框:
>>> 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) 我正在尝试在数据集中进行滚动差异.我有这样一张桌子:
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) 我正在使用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) 我正在尝试搜索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进行了测试,没有运气.
鉴于熊猫数据框架df1
和df2
:
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)