花了相当多的时间观察SO上的r和pandas标签,我得到的印象是pandas问题不太可能包含可重现的数据.这是值得的R社会一直要鼓励不错,并感谢像导游这样,新人能得到放在一起,这些例子一些帮助.能够阅读这些指南并返回可重现数据的人通常会更好地获得他们问题的答案.
我们如何为pandas问题创建良好的可重复示例?简单的数据帧可以放在一起,例如:
import pandas as pd
df = pd.DataFrame({'user': ['Bob', 'Jane', 'Alice'],
'income': [40000, 50000, 42000]})
Run Code Online (Sandbox Code Playgroud)
但是许多示例数据集需要更复杂的结构,例如:
datetime 指数或数据expand.grid()函数,它会产生某些给定变量的所有可能组合?)对于dput()难以使用几行代码进行模拟的数据集,是否有与R相当的R ,它允许您生成可复制粘贴的代码以重新生成数据结构?
我想在df列中获得特定值的百分比.假设我有一个df(col1,col2,col3,性别)性别列的值为M或F.我想得到df中M和F值的百分比.
我试过这个,它给了我M和F实例的数量,但我希望这些是df中值总数的百分比.
df.groupby('gender').size()
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?
我有一个很大的数据帧,我正在按1到n列分组,并希望在两列(例如foo和bar)上对这些组应用函数.
这是一个示例数据帧:
foo_function = lambda x: np.sum(x.a+x.b)
df = pd.DataFrame({'a':[1,2,3,4,5,6],
'b':[1,2,3,4,5,6],
'c':['q', 'q', 'q', 'q', 'w', 'w'],
'd':['z','z','z','o','o','o']})
# works with apply, but I want transform:
df.groupby(['c', 'd'])[['a','b']].apply(foo_function)
# transform doesn't work!
df.groupby(['c', 'd'])[['a','b']].transform(foo_function)
TypeError: cannot concatenate a non-NDFrame object
Run Code Online (Sandbox Code Playgroud)
但transform显然无法将多个列组合在一起,因为它分别查看每个列(与apply不同).在速度/优雅方面,下一个最佳选择是什么?例如,我可以使用apply,然后df['new_col']通过使用创建pd.match,但这将需要匹配有时多个groupby列(col1和col2),这似乎真的很hacky /将需要相当数量的代码.
- >是否有一个类似groupby().变换的函数可以使用多个列的函数?如果这不存在,最好的黑客是什么?
我正在尝试研究如何使用groupbypandas中的函数来计算每年使用给定的是/否标准的值的比例.
例如,我有一个名为的数据框names:
Name Number Year Sex Criteria
0 name1 789 1998 Male N
1 name1 688 1999 Male N
2 name1 639 2000 Male N
3 name2 551 1998 Male Y
4 name2 499 1999 Male Y
Run Code Online (Sandbox Code Playgroud)
我可以用
namesgrouped = names.groupby(["Sex", "Year", "Criteria"]).sum()
Run Code Online (Sandbox Code Playgroud)
要得到:
Number
Sex Year Criteria
Male 1998 N 14507
Y 2308
1999 N 14119
Y 2331
Run Code Online (Sandbox Code Playgroud)
等等.我希望"数字标准"列显示每个性别和年份总数的百分比 - 因此,除了1998年以上的N = 14507和Y = 2308,我有N = 86.27%和Y = 13.73%.
任何人都可以建议如何做到这一点?
我有以下代码:
import numpy as np
import pandas as pd
obs = pd.DataFrame({
'storm': [1, 1, 1, 1, 0, 0, 0, 0],
'lightning': [1, 1, 0, 0, 1, 1, 0, 0],
'thunder': [1, 0, 1, 0, 1, 0, 1, 0],
'p': [0.20, 0.05, 0.04, 0.36, 0.04, 0.01, 0.03, 0.27]
})
g1=obs.groupby(['lightning','thunder']).agg({'p':'sum'})
g2=obs.groupby(['lightning','thunder','storm']).agg({'p':'sum'})
Run Code Online (Sandbox Code Playgroud)
这使
现在如何将更详细的分组依据除以较不详细的分组(以计算百分比)?
我想通过将另一列上的值分组来对一列应用自定义操作。按列分组以获取计数,然后将所有分组记录的另一个列值除以该计数。
我的数据框:
emp opp amount
0 a 1 10
1 b 1 10
2 c 2 30
3 b 2 30
4 d 2 30
Run Code Online (Sandbox Code Playgroud)
我的情况:
最终输出数据帧:
emp opp amount
0 a 1 5
1 b 1 5
2 c 2 10
3 b 2 10
4 d 2 10
Run Code Online (Sandbox Code Playgroud)
最好的办法是什么
分组后我有以下输出
Publisher.groupby('Category')['Title'].count()
Category
Coding 5
Hacking 7
Java 1
JavaScript 5
LEGO 43
Linux 7
Networking 5
Others 123
Python 8
R 2
Ruby 4
Scripting 4
Statistics 2
Web 3
Run Code Online (Sandbox Code Playgroud)
在上面的输出中,我还希望该百分比,即第一行的百分比5*100/219,依此类推。我正在关注
Publisher.groupby('Category')['Title'].agg({'Count':'count','Percentage':lambda x:x/x.sum()})
Run Code Online (Sandbox Code Playgroud)
但这给了我一个错误。请帮忙
我无法发表评论,因为我是 stackoverflow 的新手,所以不能直接在线程中提问,但我想澄清这个问题中的解决方案:
Run Code Online (Sandbox Code Playgroud)# From Paul H import numpy as np import pandas as pd np.random.seed(0) df = pd.DataFrame({'state': ['CA', 'WA', 'CO', 'AZ'] * 3, 'office_id': list(range(1, 7)) * 2, 'sales': [np.random.randint(100000, 999999) for _ in range(12)]}) state_office = df.groupby(['state', 'office_id']).agg({'sales': 'sum'}) # Change: groupby state_office and divide by sum state_pcts = state_office.groupby(level=0).apply(lambda x: 100 * x / float(x.sum()))
我了解多索引选择(级别 0 与级别 1),但我不清楚xlambda 函数中的每个索引是指什么。将x在x.sum()会向我提及level = 0(总结中的每个分组在所有的结果level = 0),但 …
考虑这个带有许多列的 DataFrame,但它在 列 中定义了一个功能'feature',并在 列 中定义了一些值'values'。
我想要在额外的列中显示每个特征(组)的相对值所需的结果是由我在列中手动预先计算的'desired'
df = pd.DataFrame(
data={
'feature': [1, 1, 2, 3, 3, 3],
'values': [30.0, 20.0, 25.0, 100.0, 250.0, 50.0],
'desired': [0.6, 0.4, 1.0, 0.25, 0.625, 0.125],
'more_columns': range(6),
},
)
Run Code Online (Sandbox Code Playgroud)
这导致了 DataFrame
feature values desired more_columns
0 1 30.0 0.600 0
1 1 20.0 0.400 1
2 2 25.0 1.000 2
3 3 100.0 0.250 3
4 3 250.0 0.625 4
5 3 50.0 0.125 5
Run Code Online (Sandbox Code Playgroud)
因此,对于由特征定义的组,1所需的值为 …
我已经看到了许多其他相关的 SO 问题,例如this和this,但它们似乎并不是我想要的。假设我有一个这样的数据框:
import pandas as pd
df = pd.DataFrame(columns=['patient', 'parent csn', 'child csn', 'days'])
df.loc[0] = [0, 0, 10, 5]
df.loc[1] = [0, 0, 11, 3]
df.loc[2] = [0, 1, 12, 6]
df.loc[3] = [0, 1, 13, 4]
df.loc[4] = [1, 2, 20, 4]
df
Out[9]:
patient parent csn child csn days
0 0 0 10 5
1 0 0 11 3
2 0 1 12 6
3 0 1 13 4
4 1 2 …Run Code Online (Sandbox Code Playgroud) pandas ×10
python ×9
group-by ×3
dataframe ×2
aggregate ×1
apply ×1
lambda ×1
percentage ×1
pivot ×1
python-3.x ×1