我使用 Postgres SQL 遇到了类似的问题,但我认为这种任务在 Postgres 中确实很难完成,我认为 python/pandas 会让这变得容易得多,尽管我仍然无法完全想出解决方案。
我现在有一个 Pandas Dataframe,如下所示:
df={'planid' : ['A', 'A', 'B', 'B', 'C', 'C'],
'x' : ['a1', 'a2', 'b1', 'b2', 'c1', 'c2']}
df=pd.DataFrame(df)
df
planid x
0 A a1
1 A a2
2 B b1
3 B b2
4 C c1
5 C c2
Run Code Online (Sandbox Code Playgroud)
我想获得 planid 彼此不相等的所有可能的排列。换句话说,将 planid 中的每个值视为一个“桶”,如果我要从 中的x每个“桶”中提取值,我想要所有可能的组合planid。在这个特定的例子中,总共有 8 个排列 {(a1, b1, c1), (a1, b2, c1), (a1, b1, c2), (a1, b2, c2), (a2, b1, c1) ,(a2,b2,c1),(a2,b1,c2),(a2,b2,c2)}。
但是,我希望生成的数据框为三列 ,planid …
检查数组中是否存在一个值非常简单.例如,以下内容将返回true.
SELECT 'hello' = ANY(ARRAY['hello', 'bees'])
Run Code Online (Sandbox Code Playgroud)
但是,如果我想检查数组中是否存在多个值,该怎么办?例如,如果数组中存在'hello'或'bye',我想返回true.我想做点什么
SELECT ['hello', 'bye'] = ANY(ARRAY['hello', 'bees'])
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用.
编辑:
我还想弄清楚如何检查多个值是否具有公共前缀的数组中是否存在多个值.
例如,如果我想在数组包含前缀为'hello'的任何元素时返回true.所以我基本上想要类似的东西
SELECT ARRAY['hello%'] && ARRAY['helloOTHERSTUFF']
Run Code Online (Sandbox Code Playgroud)
是真实的.
我在于R的数据帧被认为具有重复.但是,我需要删除一些重复项.特别是,我只想删除与行相邻的重复项,但保留其余部分.例如,假设我有数据框:
df = data.frame(x = c("A", "B", "C", "A", "B", "C", "A", "B", "B", "C"),
y = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
Run Code Online (Sandbox Code Playgroud)
这导致以下数据帧
x y
A 1
B 2
C 3
A 4
B 5
C 6
A 7
B 8
B 9
C 10
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我希望重复"A,B,C,A,B,C等".但是,如果我看到相邻的行重复,这只是一个问题.在我上面的例子中,那将是行8和9,其中副本"B"彼此相邻.
在我的数据集中,每当发生这种情况时,第一个实例始终是用户错误,第二个实例始终是正确的版本.在极少数情况下,可能存在重复发生3次(或更多次)的实例.但是,在每种情况下,我总是希望保持最后一次出现.因此,按照上面的例子,我希望最终的数据集看起来像
A 1
B 2
C 3
A 4
B 5
C 6
A 7
B 9
C 10
Run Code Online (Sandbox Code Playgroud)
在R中有一个简单的方法吗?预先感谢您的帮助!
编辑次数:11/19/2014 12:14 PM EST 用户Akron(拼写?)发布的解决方案已被删除.我现在明白为什么,因为它似乎对我有用? …
我有一个空的YAML文件,当我加载它时,我想将其作为空字典加载.例如,我有
import yaml
with open('an_empty_file.yml', 'r') as config_file:
config=yaml.load(config_file)
print(config)
None
Run Code Online (Sandbox Code Playgroud)
事实证明,这yaml.load(config_file)将返回一个NoneType对象,我认为这是有道理的.有一种简单的方法可以返回一个空字典吗?
如果我在 Postgres 9.5.1 中有 oid,我想弄清楚如何获取表的模式。我尝试使用information_schema但无法弄清楚我使用哪个表与oid.
我收到的警告似乎没有包含在任何其他在线资源中.我安装了Anaconda Python 3.6.我在创建新的Conda环境时收到的警告是:
RequestsDependencyWarning: urllib3 (1.22) or chardet (2.3.0) doesn't match a supported version!
RequestsDependencyWarning)
Run Code Online (Sandbox Code Playgroud)
我认为这是一个pip问题,因为可能有相关的问题(不确定它是否确实是:如何修复urllib3 RuntimeError:请求依赖'urllib3'必须是版本> = 1.21.1,<1.22?).但我得到同样的问题:
$ conda update pip
/Users/VincentLa/anaconda3/lib/python3.6/site-packages/requests/__init__.py:80: RequestsDependencyWarning: urllib3 (1.22) or chardet (2.3.0) doesn't match a supported version!
RequestsDependencyWarning)
Run Code Online (Sandbox Code Playgroud) 我在Windows的Ubuntu上使用Bash,并安装了git。如何将git添加到我的PATH?
假设我有一个字段:
product_strength
10MG/ML
0.25MG
25MG
0.125MG
Run Code Online (Sandbox Code Playgroud)
如何仅提取“数字”部分然后转换为数字?我可以做到这一点:regexp_replace(product_strength, '(\D|!\.)','','g')::numeric AS result_numeric
但问题在于它实际上并没有考虑小数点。换句话说,这将返回
product_strength result_numeric
10MG/ML 10
0.25MG 25
25MG 25
0.125MG 125
Run Code Online (Sandbox Code Playgroud)
但我想回来
product_strength result_numeric
10MG/ML 10
0.25MG 0.25
25MG 25
0.125MG 0.125
Run Code Online (Sandbox Code Playgroud) 我有一个关于使用lapply的问题.例如,考虑一个非常简单的例子.
dir = list("2013", "2012", "2011")
Run Code Online (Sandbox Code Playgroud)
我想使用lapply将这些元素转换为"year_2013","year_2012"和"year_2011".我该怎么办?我尝试过类似的东西
dir = lapply(dir, paste0("year", dir))
Run Code Online (Sandbox Code Playgroud)
但这并不是很有效.
预先感谢您的任何帮助!
我想知道如何将列表转换为R中的向量,其中每个向量包含列表元素的元素.特别是,我希望第一个向量包含列表中每个元素的第一个元素.我希望第二个向量包含列表中每个元素的第二个元素.更一般地说,我希望第n个向量包含列表中每个元素的第n个元素.因此,n将等于列表中最长元素的长度.
例如,假设我们有:
mylist = list(c("a", "b"), c(character(0)), c(1, 2, 3))
Run Code Online (Sandbox Code Playgroud)
我想在其中创建三个向量
first_vector = c("a", NA, 1)
second_vector = c("b", NA, 2)
third_vector = c(NA, NA, 3)
Run Code Online (Sandbox Code Playgroud)
正如您在上面的示例中所看到的,由于缺少值,我可能会有其他复杂情况.
非常感谢您提前寻求帮助!
-Vincent
我正在查看一个CSV文件,该文件在字段中间具有LF字符,而CRLF字符实际上表示新行。我正在Sublime Text 3中以十六进制查看文件,我想做一个简单的查找并替换为我搜索LF字符但不是CRLF的地方,并用空格替换。
我已经找到了LF但不是CRLF,我可以使用正则表达式
[^0d]0a。问题是它不能捕获您可能拥有XX0d 0aXX的情况,而且我不知道如何使用正则表达式捕获它。然后,我想用十六进制的'20'代替。
我想知道是否可以使用描述函数按特定列的不同值进行分组?
例如,假设我有以下数据框:
import pandas as pd
data = {'gender': ['male', 'female', 'female', 'male',' female'],
'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'],
'age': [42, 52, 36, 24, 73],
'preTestScore': [4, 24, 31, 2, 3],
'postTestScore': [25, 94, 57, 62, 70]}
df = pd.DataFrame(data, columns = ['gender', 'name', 'age', 'preTestScore', 'postTestScore'])
Run Code Online (Sandbox Code Playgroud)
现在,如果我使用描述函数,我将获得整个数据框的描述性统计数据
df.describe()
age preTestScore postTestScore
count 5.000000 5.000000 5.000000
mean 45.400000 12.800000 61.600000
std 18.460769 13.663821 24.905823
min 24.000000 2.000000 25.000000
25% 36.000000 3.000000 57.000000
50% 42.000000 4.000000 62.000000
75% 52.000000 24.000000 …Run Code Online (Sandbox Code Playgroud) python ×4
postgresql ×3
r ×3
pandas ×2
regex ×2
anaconda ×1
arrays ×1
dictionary ×1
duplicates ×1
git ×1
lapply ×1
list ×1
permutation ×1
pip ×1
windows ×1
yaml ×1