我有一个数据框,在第1轴(列)中有一个分层索引(来自一个groupby.agg操作):
USAF WBAN year month day s_PC s_CL s_CD s_CNT tempf
sum sum sum sum amax amin
0 702730 26451 1993 1 1 1 0 12 13 30.92 24.98
1 702730 26451 1993 1 2 0 0 13 13 32.00 24.98
2 702730 26451 1993 1 3 1 10 2 13 23.00 6.98
3 702730 26451 1993 1 4 1 0 12 13 10.04 3.92
4 702730 26451 1993 1 5 3 0 10 13 19.94 10.94
Run Code Online (Sandbox Code Playgroud)
我想扁平它,所以它看起来像这样(名字不重要 …
def stack_plot(data, xtick, col2='project_is_approved', col3='total'):
ind = np.arange(data.shape[0])
plt.figure(figsize=(20,5))
p1 = plt.bar(ind, data[col3].values)
p2 = plt.bar(ind, data[col2].values)
plt.ylabel('Projects')
plt.title('Number of projects aproved vs rejected')
plt.xticks(ind, list(data[xtick].values))
plt.legend((p1[0], p2[0]), ('total', 'accepted'))
plt.show()
def univariate_barplots(data, col1, col2='project_is_approved', top=False):
# Count number of zeros in dataframe python: /sf/answers/3607836501/
temp = pd.DataFrame(project_data.groupby(col1)[col2].agg(lambda x: x.eq(1).sum())).reset_index()
# Pandas dataframe grouby count: /sf/answers/1356991401/
temp['total'] = pd.DataFrame(project_data.groupby(col1)[col2].agg({'total':'count'})).reset_index()['total']
temp['Avg'] = pd.DataFrame(project_data.groupby(col1)[col2].agg({'Avg':'mean'})).reset_index()['Avg']
temp.sort_values(by=['total'],inplace=True, ascending=False)
if top:
temp = temp[0:top]
stack_plot(temp, xtick=col1, col2=col2, col3='total')
print(temp.head(5))
print("="*50)
print(temp.tail(5))
univariate_barplots(project_data, 'school_state', 'project_is_approved', False) …Run Code Online (Sandbox Code Playgroud) 我认为这是一个相当基本的问题,但我似乎无法找到解决方案.
我有一个类似于以下的pandas数据帧:
import pandas as pd
df = pd.DataFrame({'A' : ['x','x','y','z','z'],
'B' : ['p','p','q','r','r']})
df
Run Code Online (Sandbox Code Playgroud)
这会创建一个这样的表:
A B
0 x p
1 x p
2 y q
3 z r
4 z r
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个表,表示该数据帧中不同值的数量.所以我的目标是这样的:
A B c
0 x p 2
1 y q 1
2 z r 2
Run Code Online (Sandbox Code Playgroud)
但是,我无法找到正确的功能来实现这一目标.我试过了:
df.groupby(['A','B']).agg('count')
Run Code Online (Sandbox Code Playgroud)
这将生成一个包含3行(如预期)但没有"count"列的表.我不知道如何添加count计数列.有人能指出我正确的方向吗?
我有一个数据框,我在其中对 3 列进行 groupby 并汇总数字列的总和和大小。运行代码后
df = pd.DataFrame.groupby(['year','cntry', 'state']).agg(['size','sum'])
Run Code Online (Sandbox Code Playgroud)
我得到如下内容:
现在我想从主列中拆分我的大小子列并仅创建单个大小的列,但希望将总和列保留在主列标题下。我尝试了不同的方法但没有成功。这些是我尝试过但无法让事情为我工作的方法:
将 Pandas GroupBy 对象转换为 DataFrame
如果有人可以帮助我解决这个问题,将不胜感激。
问候,
我有一个包含很多行的数据框。有时,价值观是其中之一,对我的目的不是很有用。
如何从第 2 列和第 3 列的值出现不超过 5 次的地方删除所有行?
df 输入
Col1 Col2 Col3 Col4
1 apple tomato banana
1 apple potato banana
1 apple tomato banana
1 apple tomato banana
1 apple tomato banana
1 apple tomato banana
1 grape tomato banana
1 pear tomato banana
1 lemon tomato banana
Run Code Online (Sandbox Code Playgroud)
输出
Col1 Col2 Col3 Col4
1 apple tomato banana
1 apple tomato banana
1 apple tomato banana
1 apple tomato banana
1 apple tomato banana
Run Code Online (Sandbox Code Playgroud) 我为商店创建了一个熊猫数据框
我有列 Transaction 和 Item_Type
import pandas as pd
data = {'Transaction':[1, 2, 2, 2, 3], 'Item_Type':['Food', 'Drink', 'Food', 'Drink', 'Food']}
df = pd.DataFrame(data, columns=['Transaction', 'Item_Type'])
Run Code Online (Sandbox Code Playgroud)
Transaction Item_Type
1 Food
2 Drink
2 Food
2 Drink
3 Food
Run Code Online (Sandbox Code Playgroud)
我正在尝试按交易分组并计算每笔交易的饮料数量,但找不到正确的语法来执行此操作。
df = df.groupby(['Transaction','Item_Type']).size()
Run Code Online (Sandbox Code Playgroud)
这种工作,但给了我一个多指数系列,我还不能弄清楚如何从中选择每笔交易的饮料。
1/Food 1
2/Drink 2
2/Food 1
3/Food 1
Run Code Online (Sandbox Code Playgroud)
这看起来很笨重 - 有更好的方法吗?
这个stackoverflow似乎最相似在pandas中向groupby的结果添加“计数”列?
我有一列显示演出的票证ID的列,(每个家庭成员使用相同的票证ID)我想通过计算票证ID重复多少次来创建一个新的cloumn,即家庭人数。
ticketID
113796
2543
19950
382653
349211
3101297
PC 17562
113503
113503
Run Code Online (Sandbox Code Playgroud) 当我总结一个数据框并将其重新加入原始数据框时,则在使用列名时遇到了麻烦。
这是原始数据框:
import pandas as pd
d = {'col1': ["a", "a", "b", "a", "b", "a"], 'col2': [0, 4, 3, -5, 3, 4]}
df = pd.DataFrame(data=d)
Run Code Online (Sandbox Code Playgroud)
现在,我计算一些统计数据并将其合并回:
group_summary = df.groupby('col1', as_index = False).agg({'col2': ['mean', 'count']})
df = pd.merge(df, group_summary, on = 'col1')
Run Code Online (Sandbox Code Playgroud)
数据框现在具有一些奇怪的列名:
df
Out:
col1 col2 (col2, mean) (col2, count)
0 a 0 0.75 4
1 a 4 0.75 4
2 a -5 0.75 4
3 a 4 0.75 4
4 b 3 3.00 2
5 b 3 3.00 2 …Run Code Online (Sandbox Code Playgroud)