gpt4 book ai didi

python - Pandas 使用计数和条件总结不同的数据类型

转载 作者:行者123 更新时间:2023-12-01 05:24:28 24 4
gpt4 key购买 nike

我正在处理一个大型数据集,因此我将创建以下类似的条件:

假设我们正在使用这个数据集:

import pandas as pd

df=pd.DataFrame({'Location': [ 'NY', 'SF', 'NY', 'NY', 'SF', 'SF', 'TX', 'TX', 'TX', 'DC'],
'Class': ['H','L','H','L','L','H', 'H','L','L','M'],
'Address': ['12 Silver','10 Fak','12 Silver','1 North','10 Fak','2 Fake', '1 Red','1 Dog','2 Fake','1 White'],
'Score':['4','5','3','2','1','5','4','3','2','1',]})

所以我希望这些行在 df.Location 中具有唯一值

第一列是每个位置的数据条目数。我可以通过以下方式单独获取:

df[df['Location'] =='SF'].count()['Location']
df[df['Location'] =='NY'].count()['Location']
df[df['Location'] =='TX'].count()['Location']
df[df['Location'] =='DC'].count()['Location']

第二、第三和第四列我想对类(H、L、M)中的不同类型进行求和。我知道我可以通过以下方式做到这一点:

#Second Col for NY
print (df[(df.Location =='NY') & (df.Class=='H')].count()['Class'])
#Third Col for NY
print (df[(df.Location =='NY') & (df.Class=='L')].count()['Class'])
#Fourth Col for NY
print (df[(df.Location =='NY') & (df.Class=='M')].count()['Class'])

我猜这适用于数据透视表,但由于我使用的是数据框,所以一切都混淆了。

对于第五列,我希望合并每个地址的唯一值的数量。例如,在纽约,该值应为 2,因为有两个唯一值和“12 Silver”的重复项

print (df[(df.Location =='NY')].Address)
>>>
0 12 Silver
2 12 Silver
3 1 North
Name: Address, dtype: object

我想这可以通过 groupby 来完成。但我在使用的时候总是感到困惑。我也可以使用.drop_duplicates然后count获取数值

如果值小于整数 4,则应为第六列。因此 NY 的值应为

print (df[(df.Location =='NY') & (df.Score.astype(float) < 4)].count()['Score'])

那么制作这样的数据框的好方法是什么?其中行与上述列的位置是唯一的?

它应该看起来像:

   Pop  H   L  M  HH L4
DC 1 0 0 1 1 1
NY 3 2 1 0 2 2
SF 3 1 2 0 2 1
TX 3 1 2 0 3 2

由于我或多或少知道如何获取每个单独的组件,因此我可以使用 for loop通过数组,但应该有更简单的方法来做到这一点。

最佳答案

虽然有了足够的堆叠技巧,你也许可以一次性完成这一切,但我认为这不值得。您有一个枢轴操作和一堆分组操作。因此,分别进行它们(这很容易),然后合并结果。

第 1 步是将 Score 设为 float 列;最好在开始处理之前先确定类型。

>>> df["Score"] = df["Score"].astype(float)

然后我们将使用类似 groupby 的列创建一个新框架。我们可以通过传递 .agg 一个字典来做到这一点,但之后我们必须重命名这些列,所以没有多大意义。

>>> gg = df.groupby("Location")
>>> summ = pd.DataFrame({"Pop": gg.Location.count(),
... "HH": gg.Address.nunique(),
... "L4": gg.Score.apply(lambda x: (x < 4).sum())})
>>> summ
HH L4 Pop
Location
DC 1 1 1
NY 2 2 3
SF 2 1 3
TX 3 2 3

[4 rows x 3 columns]

然后我们可以旋转:

>>> class_info = df.pivot_table(rows="Location", cols="Class", aggfunc='size', fill_value=0)
>>> class_info
Class H L M
Location
DC 0 0 1
NY 2 1 0
SF 1 2 0
TX 1 2 0

[4 rows x 3 columns]

并结合:

>>> new_df = pd.concat([summ, class_info], axis=1)
>>> new_df
HH L4 Pop H L M
Location
DC 1 1 1 0 0 1
NY 2 2 3 2 1 0
SF 2 1 3 1 2 0
TX 3 2 3 1 2 0

[4 rows x 6 columns]

您可以根据需要重新排序。

关于python - Pandas 使用计数和条件总结不同的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21666202/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com