Blet采用以下DataFrame:
import pandas as pd
df = pd.DataFrame({
'Region' : ['A', 'A', 'C', 'C', 'C', 'B'],
'Store' : ['A', ' B ', 'A ', 'B ', 'A ', 'A'],
'Quantity': [1, 1, 2, 3, 4, 5],
'Date' : ['2009-04-05','2009-04-05','2010-05-05', '2009-08-05', '2011-02-05', '2009-04-05']})
df['Date'] = df['Date'].apply(lambda x: pd.to_datetime(x))
df.set_index(['Date','Region','Store'], inplace=True)
df_1 = df.unstack(level=[1,2])
使用生成的DataFrame df_1如何找到商店A和B在同一地区产品中销售产品的日期。作为此问题的答案,查询应仅返回日期' 2009-04-05'
由于
答案 0 :(得分:0)
为什么放弃指数?它们包含有用的信息(也就是说,您为了获取数据而分组的内容 - 当您想根据分组进行计算时,很可能需要这样做:))
df.groupby(level=[0,1]).apply(lambda x: len(x)==2)
给我
Out[197]:
Date Region
2009-04-05 A True
B False
2009-08-05 C False
2010-05-05 C False
2011-02-05 C False
dtype: bool
你可以考虑一个更好的条件而不是检查组的长度(如果你有0
或NaN
卖出的条目,这会变得稍微复杂一点 - 你必须过滤x首先),但我们在这里给你的是一个起点:)
答案 1 :(得分:0)
如果您需要从未堆叠的数据框df_1
开始,我认为您可以执行以下操作。我将其分成几个步骤,以便您可以看到我正在做的事情。当然,你可以链接许多步骤。
In [61]: df_2 = df_1.applymap(lambda x: 1 if pd.notnull (x) else 0)
In [62]: df_2
Out[62]:
Quantity
Region A C B
Store A B A B A
Date
2009-04-05 1 1 0 0 1
2009-08-05 0 0 0 1 0
2010-05-05 0 0 1 0 0
2011-02-05 0 0 1 0 0
[4 rows x 5 columns]
In [63]: df_3 = df_2.sum(level=1,axis=1)
In [64]: df_3
Out[64]:
Region A B C
Date
2009-04-05 2 1 0
2009-08-05 0 0 1
2010-05-05 0 0 1
2011-02-05 0 0 1
[4 rows x 3 columns]
In [65]: print df_3[df_3>=2].dropna(how='all').index
<class 'pandas.tseries.index.DatetimeIndex'>
[2009-04-05]
Length: 1, Freq: None, Timezone: None