我刚开始使用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
False
和Class
对/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万个条目。
答案 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