我正在尝试重塑我的数据.乍一看,它听起来像一个转置,但事实并非如此.我尝试过融化,堆叠/取消堆叠,连接等.
用例
我希望每个唯一个体只有一行,并将所有作业历史记录放在列上.对于客户端,可以更容易地跨行读取信息而不是读取列.
这是数据:
import pandas as pd
import numpy as np
data1 = {'Name': ["Joe", "Joe", "Joe","Jane","Jane"],
'Job': ["Analyst","Manager","Director","Analyst","Manager"],
'Job Eff Date': ["1/1/2015","1/1/2016","7/1/2016","1/1/2015","1/1/2016"]}
df2 = pd.DataFrame(data1, columns=['Name', 'Job', 'Job Eff Date'])
df2
Run Code Online (Sandbox Code Playgroud)
这就是我想要它的样子: 所需的输出表
嗨,我有一个过滤器“m”集,它足够灵活,可以由我进行更改。有时,我想按 Car 或 x_acft_body 或任何其他各种字段等进行过滤。有时我想通过注释和取消注释所需的行来返回所有行。但不更改后续代码,在过滤器 'm' 行之后。
当我不想应用过滤器时,我如何才能拥有一个对所有行都返回 true 的过滤器?例如,类似的东西,1==1但我知道这行不通。
我不想设置dfdata.somefield.notnull()等等,因为我不太确定这个字段是否总是不为空。我也不想将后续代码更改为dfdata.groupby. ie 没有[m]
# set filter if needed
m = ( 1==1 #& return true at all times
# (dfdata.Car == 'PG') #&
# (dfdata.x_acft_body == 'N')# &
# (dfdata.Car.isin(['PG', 'VJ', 'VZ']))
)
dft1 = dfdata[m].groupby(['FLD1']).agg({'FLD2': 'count'})
Run Code Online (Sandbox Code Playgroud) 我试图从具有多个索引的 Pandas 数据框中仅检索最大值(包括多索引值)。我拥有的数据框是通过 groupby 和列选择 ('tOfmAJyI') 生成的,如下所示:
df.groupby('id')['tOfmAJyI'].value_counts()
Out[4]:
id tOfmAJyI
3 mlNXN 4
SSvEP 2
hCIpw 2
5 SSvEP 2
hCIpw 1
mlNXN 1
11 mlNXN 2
SSvEP 1
...
Run Code Online (Sandbox Code Playgroud)
我想实现的是获得最大值,包括它们相应的索引值。所以像:
id tOfmAJyI
3 mlNXN 4
5 SSvEP 2
11 mlNXN 2
...
Run Code Online (Sandbox Code Playgroud)
我有什么想法可以实现这一目标吗?我能够获得 id 和最大值,但我仍在尝试获得 'tOfmAJyI' 的相应值。
假设df.bun(df 是 Pandas 数据帧)是一个多索引(日期和名称),变量是用字符串写入的类别值,
date name values
20170331 A122630 stock-a
A123320 stock-a
A152500 stock-b
A167860 bond
A196030 stock-a
A196220 stock-a
A204420 stock-a
A204450 curncy-US
A204480 raw-material
A219900 stock-a
Run Code Online (Sandbox Code Playgroud)
我怎样才能让它代表同一日期的总计数及其百分比,以便用每个日期制作如下表格,
date variable counts Percentage
20170331 stock 7 70%
bond 1 10%
raw-material 1 10%
curncy 1 10%
Run Code Online (Sandbox Code Playgroud)
我已经解决print(df.groupby('bun').count())了这个问题,但它缺乏..
cf) 在获取 df.bun 之前,我使用以下代码将嵌套字典导入到 Pandas 数据框。
import numpy as np
import pandas as pd
result = pd.DataFrame()
origDict = np.load("Hannah Lee.npy")
for item in range(len(origDict)):
newdict = {(k1, k2):v2 …Run Code Online (Sandbox Code Playgroud) 我有以下python / pandas命令:
df.groupby('Column_Name').agg(lambda x: x.value_counts().max()
Run Code Online (Sandbox Code Playgroud)
我在哪里获取DataFrameGroupBy对象中所有列的值计数。
如何在PySpark中执行此操作?
我怎么能使用多维Grouper,在这种情况下是另一个数据帧,作为另一个数据帧的Grouper?可以一步完成吗?
我的问题主要是关于如何在这些情况下执行实际的分组,但要使其更具体,请说我想接受transform并采取sum.
考虑例如:
df1 = pd.DataFrame({'a':[1,2,3,4], 'b':[5,6,7,8]})
print(df1)
a b
0 1 5
1 2 6
2 3 7
3 4 8
df2 = pd.DataFrame({'a':['A','B','A','B'], 'b':['A','A','B','B']})
print(df2)
a b
0 A A
1 B A
2 A B
3 B B
Run Code Online (Sandbox Code Playgroud)
然后,预期的输出将是:
a b
0 4 11
1 6 11
2 4 15
3 6 15
Run Code Online (Sandbox Code Playgroud)
凡列a并b在df1已按列进行分组a,并b从df2分别.
我有一个这样的数据框:
id date company ......
123 2019-01-01 A
224 2019-01-01 B
345 2019-01-01 B
987 2019-01-03 C
334 2019-01-03 C
908 2019-01-04 C
765 2019-01-04 A
554 2019-01-05 A
482 2019-01-05 D
Run Code Online (Sandbox Code Playgroud)
并且我想获取“公司”列随时间的唯一值的累积数量。因此,如果公司在以后出现,则不会再计算在内。
我的预期输出是:
date cumulative_count
2019-01-01 2
2019-01-03 3
2019-01-04 3
2019-01-05 4
Run Code Online (Sandbox Code Playgroud)
我试过了:
df.groupby(['date']).company.nunique().cumsum()
Run Code Online (Sandbox Code Playgroud)
但是,如果同一家公司在不同的日期出现,则此重复计算。
我正在浏览 pandas groupby 文档,当我在特定列上分组时,如下所示:
df:
A B C D
0 foo one -0.987674 0.039616
1 bar one -0.653247 -1.022529
2 foo two 0.404201 1.308777
3 bar three 1.620780 0.574377
4 foo two 1.661942 0.579888
5 bar two 0.747878 0.463052
6 foo one 0.070278 0.202564
7 foo three 0.779684 -0.547192
grouped=df.groupby('A')
grouped.describe(A)
Run Code Online (Sandbox Code Playgroud)
给
C ... D
count mean std ... 50% 75% max
A B ...
bar one 1.0 0.224944 NaN ... 1.107509 1.107509 1.107509
three 1.0 0.704943 NaN ... 1.833098 …Run Code Online (Sandbox Code Playgroud) 所以我有一个这样的 df
In [1]:data= {'Group': ['A','A','A','A','A','A','B','B','B','B'],
'Name': [ ' Sheldon Webb',' Traci Dean',' Chad Webster',' Ora Harmon',' Elijah Mendoza',' June Strickland',' Beth Vasquez',' Betty Sutton',' Joel Gill',' Vernon Stone'],
'Performance':[33,64,142,116,122,68,95,127,132,80]}
In [2]:df = pd.DataFrame(data, columns = ['Group', 'Name','Performance'])
Out[1]:
Group Name Performance
0 A Sheldon Webb 33
1 A Traci Dean 64
2 A Chad Webster 142
3 A Ora Harmon 116
4 A Elijah Mendoza 122
5 A June Strickland 68
6 B Beth Vasquez 95
7 B Betty …Run Code Online (Sandbox Code Playgroud) 我有一个 Pandas 数据框,其中包含变量名称、每个变量的值和count(显示该行的频率):
df = pd.DataFrame({'var':['A', 'B', 'C'], 'value':[10, 20, 30], 'count':[1,2,3]})
var value count
A 10 1
B 20 2
C 30 3
Run Code Online (Sandbox Code Playgroud)
我想用来count获得这样的输出:
var value
A 10
B 20
B 20
C 30
C 30
C 30
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?