Dataframe使用分组的行值作为行名称

时间:2016-04-01 20:45:43

标签: python pandas

我刚开始使用python(pandas),现在我有了第一个问题。 我有一个包含以下行名称的数据框:

ID  A    Class
1  True  [0,5]
2  False [0,5]
3  True  [5,10]
4  False [10,20]
5  True  [0,5]
6  False [10,20]

现在我正在寻找一个很酷的解决方案,我可以做这样的事情:

Class  True   False
[0,5]   2      1
[5,10]  1      0
[10,20] 0      2

我想计算True FalseClass/tmp/cc8VVSeG.o(.text+0x122): In function `main': : undefined reference to `TemperatureList<double>::TemperatureList(int)' /tmp/cc8VVSeG.o(.text+0x13d): In function `main': : undefined reference to `TemperatureList<double>::add_temperature(double)' /tmp/cc8VVSeG.o(.text+0x158): In function `main': : undefined reference to `TemperatureList<double>::add_temperature(double)' /tmp/cc8VVSeG.o(.text+0x173): In function `main': : undefined reference to `TemperatureList<double>::add_temperature(double)' /tmp/cc8VVSeG.o(.text+0x18e): In function `main': : undefined reference to `TemperatureList<double>::add_temperature(double)' /tmp/cc8VVSeG.o(.text+0x1a8): In function `main': : undefined reference to `TemperatureList<double>::get_last() const' collect2: ld returned 1 exit status 的影响。 有快速解决方案吗?我的Dataframe可能有超过200万个条目。

2 个答案:

答案 0 :(得分:4)

您可以使用pivot_table进行聚合。之后,只需格式化列名和索引以匹配您想要的输出。

# Perform the pivot and aggregation.
df = pd.pivot_table(df, index='Class', columns='A', aggfunc='count', fill_value=0)

# Format column names and index to match desired output.
df.columns = [c[1] for c in df.columns]
df.reset_index(inplace=True)

结果输出:

     Class  False  True
0    [0,5]      1     2
1  [10,20]      2     0
2   [5,10]      0     1

修改

上述解决方案假设'Class'列的元素是字符串。如果它们是列表,您可以执行以下操作:

df['Class'] = df['Class'].map(tuple)
**original solution code here**
df['Class'] = df['Class'].map(list)

答案 1 :(得分:1)

df成为您的数据框,我首先会使用:

g = df.groupby('Class')['A'].value_counts().reset_index()

返回:

     Class      A  0
0    [0,5]   True  2
1    [0,5]  False  1
2  [10,20]  False  2
3   [5,10]   True  1

然后我会转动上面的表格来获得你想要的形状:

a = pd.pivot_table(g, index='Class', columns='A', values=0).fillna(0)

返回:

A        False  True 
Class                
[0,5]      1.0    2.0
[10,20]    2.0    0.0
[5,10]     0.0    1.0