我有一个像熊猫一样的数据框:
a b
A 1
A 2
B 5
B 5
B 4
C 6
Run Code Online (Sandbox Code Playgroud)
我希望按第一列分组,并将第二列作为行中的列表:
A [1,2]
B [5,5,4]
C [6]
Run Code Online (Sandbox Code Playgroud)
使用pandas groupby可以做这样的事吗?
我有一个包含三个字符串列的数据框.我知道第3列中唯一的一个值对前两个的每个组合都有效.要清理数据,我必须按数据框前两列进行分组,并为每个组合选择第三列的最常见值.
我的代码:
import pandas as pd
from scipy import stats
source = pd.DataFrame({'Country' : ['USA', 'USA', 'Russia','USA'],
'City' : ['New-York', 'New-York', 'Sankt-Petersburg', 'New-York'],
'Short name' : ['NY','New','Spb','NY']})
print source.groupby(['Country','City']).agg(lambda x: stats.mode(x['Short name'])[0])
Run Code Online (Sandbox Code Playgroud)
最后一行代码不起作用,它说"键错误'短名称'",如果我尝试仅按城市分组,那么我得到一个AssertionError.我该怎么办呢?
我的第一个问题:我对pandas(0.12.0-4)中groupby的apply方法的这种行为感到困惑,它似乎将函数TWICE应用于数据帧的第一行.例如:
>>> from pandas import Series, DataFrame
>>> import pandas as pd
>>> df = pd.DataFrame({'class': ['A', 'B', 'C'], 'count':[1,0,2]})
>>> print(df)
class count
0 A 1
1 B 0
2 C 2
Run Code Online (Sandbox Code Playgroud)
我首先检查groupby函数是否正常,看起来没问题:
>>> for group in df.groupby('class', group_keys = True):
>>> print(group)
('A', class count
0 A 1)
('B', class count
1 B 0)
('C', class count
2 C 2)
Run Code Online (Sandbox Code Playgroud)
然后我尝试在groupby对象上使用apply做类似的事情,我得到第一行输出两次:
>>> def checkit(group):
>>> print(group)
>>> df.groupby('class', group_keys = True).apply(checkit)
class count
0 A 1
class count …Run Code Online (Sandbox Code Playgroud) 我有一个包含 3 列的 pandas 表:parent_male、parent_female、offsprings - 所有字符串。我想创建一个简单的稀疏交叉表,将男性与女性以及后代作为值 - 我如何编写一个 aggfunc 来执行此操作。(不需要真正的聚合) - 只需在空格中放置一个空字符串。