我有一个交易和客户社交群体的数据框:
print(df.sample(10))
Shop Transaction_value Social Group
7 KFC 7 Rich
22 Burger King 342 Rich
19 Burger King 6 Rich
5 KFC 2 Poor
14 McDonalds 245 Rich
2 KFC 3 Poor
16 McDonalds 56 Poor
6 KFC 6 Poor
20 Burger King 23 Poor
8 KFC 5 Poor
Run Code Online (Sandbox Code Playgroud)
我做了一个 groupby,它告诉我每个商店最常见的社交群体:
(df.groupby(['Shop', 'Social Group'])['Transaction_value'].count())
Shop Social Group
Burger King Poor 7
Rich 3
KFC Poor 6
Rich 3
McDonalds Poor 3
Rich 6
Run Code Online (Sandbox Code Playgroud)
我想将上面的数字除以value_counts()每个社会群体的数字:
df['Social Group'].value_counts()
Poor 16 …Run Code Online (Sandbox Code Playgroud) 我正在尝试执行一个简单的操作,将数据帧转换为标题大小写。
有一些 NaN 会导致错误,所以我想通过str.title()仅应用它来避免它们not null。
然而我得到了invalid syntax。
df= df.applymap(lambda x: x.title() if pd.notnull(x))
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
另一种尝试:
df= df.applymap(lambda x: x.title() if not pd.isnull(x))
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud) 如何获得第一列,然后添加另一个切片?
例如:
import pandas as pd
df = pd.DataFrame(pd.np.random.rand(6,6), columns = list('abcdef'))
a b c d e f
0 0.147163 0.710360 0.069732 0.180949 0.694066 0.639505
1 0.771643 0.094805 0.371702 0.177538 0.089168 0.420331
2 0.431394 0.790537 0.378049 0.402930 0.350409 0.827950
3 0.421411 0.451595 0.703630 0.469526 0.612122 0.076728
4 0.854117 0.302925 0.664647 0.664098 0.959504 0.637122
5 0.659791 0.525526 0.007151 0.448761 0.738571 0.349142
Run Code Online (Sandbox Code Playgroud)
我正在尝试获取专栏a,以及之后的所有专栏c。
这给我只是列c,d,e,f:
df.loc[:'a', 'c':]
Run Code Online (Sandbox Code Playgroud)
这根本不起作用:
df.loc['a':'a', 'c':]
Run Code Online (Sandbox Code Playgroud)
我做了几次尝试,但它们只是随机猜测,我确实无法在线找到解决方案。
注意:我正在处理一个巨大的真实数据框,因此写像这样的单个列名将是不切实际的 df.loc[:,['a','c','d','e','f]]
我有一个包含购买金额和日期的客户数据框。在这种情况下,我有两个客户,A并且B:
df1 = pd.DataFrame(index=pd.date_range('2015-04-24', periods = 50)).assign(purchase=[x for x in range(51,101)])
df2 = pd.DataFrame(index=pd.date_range('2015-04-28', periods = 50)).assign(purchase=[x for x in range(0,50)])
df3 = pd.concat([df1,df2], keys=['A','B'])
df3 = df3.rename_axis(['user','date']).reset_index()
print(df3.head())
user date purchase
0 A 2015-04-24 51
1 A 2015-04-25 52
2 A 2015-04-26 53
3 A 2015-04-27 54
4 A 2015-04-28 55
Run Code Online (Sandbox Code Playgroud)
我只想知道用户的平均每周支出,一周是从周一到周日。预期结果:
user average_weekly_spend
0 A 51
1 B 60
Run Code Online (Sandbox Code Playgroud)
但是我不知道如何将其设置为周一至周日。现在我正在使用resample与7D. 我认为,这意味着所有客户对一周都有不同的定义。我相信从第一次购买开始需要 7 天,依此类推。因此,每个客户都有不同的开始日期。
df3.groupby('user').apply(lambda x: x.resample('7D', on='date').mean()).groupby('user')['purchase'].mean()
user
A 78.125 …Run Code Online (Sandbox Code Playgroud) 假设我有一个交易和客户的数据框:
df = pd.DataFrame({'shop': pd.Series(['McDonalds', 'McDonalds', 'McDonalds', 'McDonalds', 'Burger King', 'Burger King', 'Burger King', 'Burger King', 'Burger King', 'Trump Golf Course', 'Trump Golf Course', 'Trump Golf Course', 'Trump Golf Course', 'Trump Golf Course', 'Trump Golf Course'],dtype='object',index=pd.RangeIndex(start=0, stop=15, step=1)), 'Customer': pd.Series(['John Ryan', 'Jim Bob', 'Mary Ryan', 'Michael Patric', 'John Ryan', 'Jim Bob', 'Mary Ryan', 'Sean Connery', 'Brad Pitt', 'John Ryan', 'John Ryan', 'Michael Patric', 'Mary Ryan', 'John Ryan', 'Jim Bob'],dtype='object',index=pd.RangeIndex(start=0, stop=15, step=1)), 'Customer ID': pd.Series([1, 2, 3, 4, 1, 2, 3, …Run Code Online (Sandbox Code Playgroud)