当存在如下所示的DataFrame时:
import pandas as pd
df = pd.DataFrame([1, 1, 1, 1, 1], index=[100, 29, 234, 1, 150], columns=['A'])
Run Code Online (Sandbox Code Playgroud)
如何通过索引对此数据帧进行排序,并将索引和列值的每个组合保持不变?
我仍然是Python pandas的pivot_table的新手,想要问一种计算一列中值的频率的方法,该列也链接到另一列ID.DataFrame如下所示.
import pandas as pd
df = pd.DataFrame({'Account_number':[1,1,2,2,2,3,3],
'Product':['A', 'A', 'A', 'B', 'B','A', 'B']
})
Run Code Online (Sandbox Code Playgroud)
对于输出,我想得到如下内容:
Product
A B
Account_number
1 2 0
2 1 2
3 1 1
Run Code Online (Sandbox Code Playgroud)
到目前为止,我尝试了这段代码:
df.pivot_table(rows = 'Account_number', cols= 'Product', aggfunc='count')
Run Code Online (Sandbox Code Playgroud)
这段代码给了我两个相同的东西.上面的代码有什么问题?我问这个问题的部分原因是这个DataFrame只是一个例子.我正在处理的真实数据有数万个account_numbers.感谢您的帮助!
我有一个如下所示的DataFrame示例:
import pandas as pd
import numpy as np
df = pd.DataFrame({'ID':[1,2,2,2,3,3,], 'date':array(['2000-01-01','2002-01-01','2010-01-01','2003-01-01','2004-01-01','2008-01-01'],dtype='datetime64[D]')})
Run Code Online (Sandbox Code Playgroud)
我正在努力争取每个ID组的第二天最早。所以我写了以下函数:
def f(x):
if len(x)==1:
return x[0]
else:
x.sort()
return x[1]
Run Code Online (Sandbox Code Playgroud)
然后我写道:
df.groupby('ID').date.apply(lambda x:f(x))
Run Code Online (Sandbox Code Playgroud)
结果是一个错误。
您能找到一种方法使这项工作吗?
我试图在R中读取用::(两个冒号)分隔的数据.当我使用sep = "::"read.table函数时,我收到一条错误消息,"sep值必须是一个字节." 我想知道我是否可以在R中读取这些数据.我在Python中读取这些数据没有任何问题.
现在,我使用sep=":"然后在另一个":"的列中获取NA.所以我删除了NA的列.有没有办法直接通过在R中指定sep ="::"来读取数据?
我有两个列表(list1和list2),其中包含1000万个公司名称.每个列表都没有重复,但有些公司出现在两个列表中.而且我想找到那些公司是什么.我写了下面的代码:
list_matched = []
for i in range(len(list1)):
for j in range(len(list2)):
if list1[i] == list2[j]:
list_matched.append(list1[i])
Run Code Online (Sandbox Code Playgroud)
这段代码的问题在于它永远不会完成执行.我的问题是我可以在合理的时间内完成这项任务.1000万名的大小似乎太大了,无法处理.
我已经阅读了几个关于计算连续行的类似问题,但没有一个给我一个明确的答案.我希望有人可以帮我解决一下我的问题.我有下表作为例子.
create table medical
(PatientID int,
Date Date,
TookTest int
);
insert into medical(PatientID, Date, TookTest)
values
(1, '2014-01-01', 1),
(1, '2014-01-05', 1),
(1, '2014-01-10', 1),
(2, '2014-01-01', 1),
(2, '2014-01-10', 0),
(2, '2014-01-20', 1),
(3, '2014-01-01', 1),
(3, '2014-01-07', 1),
(3, '2014-01-12', 1),
(3, '2014-01-21', 1),
(4, '2014-01-03', 1),
(4, '2014-01-05', 1),
(4, '2014-01-22', 0),
(4, '2014-01-27', 1)
Run Code Online (Sandbox Code Playgroud)
该表用于确定哪些患者在某些日期进行了医学检查.PatientID和日期列非常明显.最后一列,TookTest是二进制指示符列,其中1表示患者参加测试,否则为0.PatientID和日期在创建此表时进行排序.我想计算连续至少3次接受检查的患者人数.在我们的示例中,PatientID 1和3进行了3次或更多次测试.所以答案是2.有人能告诉我如何在MySQL中编写查询吗?感谢您的帮助!
我有三张表:
create table id_table (
id integer
);
insert into id_table values (1),(2),(3);
create table alphabet_table (
id integer,
letter text
);
insert into alphabet_table values (1,'a'),(2,'b'),(3,'c');
create table greek_table (
id integer,
letter text
);
insert into greek_table values (1,'alpha'),(2,'beta');
Run Code Online (Sandbox Code Playgroud)
我喜欢创建一个函数,将 id_table 与 id 上的字母表或希腊表连接起来。表的选择取决于函数中指定的输入值。我写:
CREATE OR REPLACE FUNCTION choose_letters(letter_type text)
RETURNS table (id integer,letter text) AS $$
BEGIN
RETURN QUERY
select t1.id,
case when letter_type = 'alphabet' then t2.letter else t3.letter end as letter
from id_table t1,
alphabet_table …Run Code Online (Sandbox Code Playgroud)