标签: pandas-groupby

每个唯一值采样一条记录(pandas,python)

我使用python-pandas数据帧,我有一个包含用户及其数据的大型数据帧.每个用户可以有多行.我想为每个用户采样1行.我目前的解决方案效率似乎不高

df1 = pd.DataFrame({'User': ['user1', 'user1', 'user2', 'user3', 'user2', 'user3'],
                 'B': ['B', 'B1', 'B2', 'B3','B4','B5'],
                 'C': ['C', 'C1', 'C2', 'C3','C4','C5'],
                 'D': ['D', 'D1', 'D2', 'D3','D4','D5'],
                 'E': ['E', 'E1', 'E2', 'E3','E4','E5']},
                 index=[0, 1, 2, 3,4,5])

df1
>>  B   C   D   E   User
0   B   C   D   E   user1
1   B1  C1  D1  E1  user1
2   B2  C2  D2  E2  user2
3   B3  C3  D3  E3  user3
4   B4  C4  D4  E4  user2
5   B5  C5  D5  E5  user3

userList = list(df1.User.unique()) …
Run Code Online (Sandbox Code Playgroud)

python group-by dataframe pandas pandas-groupby

10
推荐指数
1
解决办法
4030
查看次数

获取多列的唯一值作为pandas中的新数据帧

拥有df至少列C1,C2,C3的pandas数据框如何将所有唯一的C1,C2,C3值作为新的DataFrame?

换句话说,类似于:

SELECT C1,C2,C3
FROM T
GROUP BY C1,C2,C3
Run Code Online (Sandbox Code Playgroud)

试过了

print df.groupby(by=['C1','C2','C3'])
Run Code Online (Sandbox Code Playgroud)

但我得到了

<pandas.core.groupby.DataFrameGroupBy object at 0x000000000769A9E8>
Run Code Online (Sandbox Code Playgroud)

python pandas pandas-groupby

10
推荐指数
1
解决办法
7505
查看次数

来自pandas数据帧的多组重复记录

如何从数据框中获取所有现有的重复记录集(基于列)?

我有一个数据帧如下:

flight_id | from_location  | to_location |  schedule |  
1         |   Vancouver    |   Toronto   |   3-Jan   |  
2         |   Amsterdam    |   Tokyo     |   15-Feb  |  
4         |   Fairbanks    |   Glasgow   |   12-Jan  |  
9         |   Halmstad     |   Athens    |   21-Jan  |  
3         |   Brisbane     |   Lisbon    |   4-Feb   |  
4         | Johannesburg   |   Venice    |   12-Jan  |
9         | LosAngeles     |  Perth      |   3-Mar   |
Run Code Online (Sandbox Code Playgroud)

这里的flight_id是我需要检查重复项的列.并且有两组重复.

此特定示例的输出应为 - [(2,5),(3,6)].记录索引值的元组列表

python group-by dataframe pandas pandas-groupby

10
推荐指数
3
解决办法
922
查看次数

确定Python中重叠时间序列的最有效方法

我试图确定两个时间序列使用python的pandas库重叠的时间百分比.数据是非同步的,因此每个数据点的时间不对齐.这是一个例子:

时间序列1

2016-10-05 11:50:02.000734    0.50
2016-10-05 11:50:03.000033    0.25
2016-10-05 11:50:10.000479    0.50
2016-10-05 11:50:15.000234    0.25
2016-10-05 11:50:37.000199    0.50
2016-10-05 11:50:49.000401    0.50
2016-10-05 11:50:51.000362    0.25
2016-10-05 11:50:53.000424    0.75
2016-10-05 11:50:53.000982    0.25
2016-10-05 11:50:58.000606    0.75
Run Code Online (Sandbox Code Playgroud)

时间序列2

2016-10-05 11:50:07.000537    0.50
2016-10-05 11:50:11.000994    0.50
2016-10-05 11:50:19.000181    0.50
2016-10-05 11:50:35.000578    0.50
2016-10-05 11:50:46.000761    0.50
2016-10-05 11:50:49.000295    0.75
2016-10-05 11:50:51.000835    0.75
2016-10-05 11:50:55.000792    0.25
2016-10-05 11:50:55.000904    0.75
2016-10-05 11:50:57.000444    0.75
Run Code Online (Sandbox Code Playgroud)

假设系列保持其值直到下一次更改,确定它们具有相同值的时间百分比的最有效方法是什么?

让我们计算这些系列重叠的时间从11:50:07.000537开始,到2016-10-05 11:50:57.000444 0.75结束,因为我们有这个时期的两个系列的数据.有重叠的时间:

  • 11:50:10.000479 - 11:50:15.000234(两者的值均为0.5)4.999755秒
  • 11:50:37.000199 - 11:50:49.000295(两者的值均为0.5)12.000096秒
  • 11:50:53.000424 - 11:50:53.000982(均值为0.75)0.000558秒 …

python performance time-series pandas pandas-groupby

9
推荐指数
1
解决办法
1473
查看次数

如果ID出现多次,Pandas会选择行

我有这样一张桌子:

CustID  Purchase  Time
A       Item1     01/01/2011
B       Item2     01/01/2011   
C       Item1     01/02/2011   
A       Item2     03/01/2011   
Run Code Online (Sandbox Code Playgroud)

我想在表中选择CustID显示多于1的行.

python group-by dataframe pandas pandas-groupby

9
推荐指数
3
解决办法
3076
查看次数

将总数百分比列添加到Pandas数据框中

我有一个数据框,我正在进行groupby()以获取列值的计数.我正在尝试为"总百分比"添加一个额外的列.我不知道如何做到这一点.

我看了几个groupby选项,但似乎找不到合适的东西.

我的数据框看起来像这样:

              DAYSLATE
DAYSLATE          
-7 days          1
-5 days          2
-3 days          8
-2 days          9
-1 days         45
0 days         589
1 days          33
2 days           8
3 days          16
4 days          14
5 days          16
6 days           2
7 days           6
8 days           2
9 days           2
10 days          1
Run Code Online (Sandbox Code Playgroud)

python group-by pandas pandas-groupby

9
推荐指数
1
解决办法
8581
查看次数

将 pandas.core.groupby.SeriesGroupBy 转换为 DataFrame

这个问题没有得到满意的答案,所以我再问一次。

假设我有以下 Pandas DataFrame:

df1 = pd.DataFrame({'group': ['a', 'a', 'b', 'b'], 'values': [1, 1, 2, 2]})
Run Code Online (Sandbox Code Playgroud)

我按第一列“组”分组:

g1 = df1.groupby('group')
Run Code Online (Sandbox Code Playgroud)

我现在已经创建了一个“ DataFrame GroupBy”。然后我从 GroupBy 对象中提取第一列:

g1_1st_column = g1['group']
Run Code Online (Sandbox Code Playgroud)

该类型g1_1st_column的是“pandas.core.groupby。系列的GroupBy”。请注意,它不再是“ DataFrame GroupBy”。

我的问题是,如何将 SeriesGroupBy 对象转换回 DataFrame 对象?我尝试使用 .to_frame() 方法,并得到以下错误:

g1_1st_column = g1['group'].to_frame()
Run Code Online (Sandbox Code Playgroud)

AttributeError:无法访问“SeriesGroupBy”对象的可调用属性“to_frame”,请尝试使用“apply”方法。

我将如何使用 apply 方法或其他一些方法转换为 DataFrame?

python apply dataframe pandas pandas-groupby

9
推荐指数
1
解决办法
1万
查看次数

熊猫的多重累计计数

我有DF:

data = [["John","144","Smith","200"], ["Mia","220","John","144"],["Caleb","155","Smith","200"],["Smith","200","Jason","500"]]
data_frame = pd.DataFrame(data,columns = ["Name","ID","Manager_name","Manager_ID"])
data_frame
Run Code Online (Sandbox Code Playgroud)

OP:

    Name    ID    Manager_name  Manager_ID
  0 John    144    Smith             200
  1 Mia     220    John              144
  2 Caleb   155    Smith             200
  3 Smith   200    Jason             500
Run Code Online (Sandbox Code Playgroud)

我正在尝试计算“名称”列中每个人下报告的人数。

逻辑是:

计算单个报告的人数以及该链中报告的人数。例如史密斯;约翰和卡勒布向史密斯报告,所以2 + 1,而米娅向约翰报告(他已经向史密斯报告),所以总数为3。

对于杰森-> 1同样,因为史密斯向他报告,并且3个人已经向史密斯报告,所以总数为4。

我知道如何以某种递归的方式Python地做到这一点,有没有一种方法可以在Pandas中有效地做到这一点。有什么建议么?

预期的OP:

Name        Number of people reporting
John               1
Mia                0
Caleb              0
Smith              3
Jason              4
Run Code Online (Sandbox Code Playgroud)

python pandas pandas-groupby

9
推荐指数
2
解决办法
197
查看次数

熊猫中的条件累积和

我是一名前Excel高级用户,为自己的罪过而pent悔。我需要帮助为我重新创建通用计算。

我正在尝试计算贷款组合的绩效。在分子中,我正在计算累计损失总额。在分母中,我需要包含在累计总额中的贷款的原始余额。

我无法弄清楚如何在Pandas中进行条件分组。在Excel中,这非常简单,因此我希望自己对此有所考虑。

我在StackOverflow的问题上找不到很多,但这是最接近的:python pandas条件累积总和

我无法弄清楚的是我的条件基于索引中的值并包含在列中

以下是我的数据:

| Loan    | Origination | Balance | NCO Date  | NCO | As of Date | Age     (Months) | NCO Age (Months) |
|---------|-------------|---------|-----------|-----|------------|--------------|------------------|
| Loan 1  | 1/31/2011   | 1000    | 1/31/2018 | 25  | 5/31/2019  | 100              | 84               |
| Loan 2  | 3/31/2011   | 2500    |           | 0   | 5/31/2019  | 98           |                  |
| Loan 3  | 5/31/2011   | 3000    | 1/31/2019 | 15  | 5/31/2019  | …
Run Code Online (Sandbox Code Playgroud)

python pandas pandas-groupby

9
推荐指数
1
解决办法
274
查看次数

如何从 DataFrame 中找到前 N 个最小值,Python-3

我在数据框下方有字段“年龄”,需要从数据框中找到前 3 个最小年龄

DF = pd.DataFrame.from_dict({'Name':['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'], 'Age':[18, 45, 35, 70, 23, 24, 50, 65, 18, 23]})

DF['Age'].min()  
Run Code Online (Sandbox Code Playgroud)

想要列表中的前两个年龄即 18、23,如何实现?

注意:DataFrame - DF 包含 Age Duplicates,即 18 和 23 重复两次,需要唯一值。

python dataframe python-3.x pandas pandas-groupby

9
推荐指数
1
解决办法
968
查看次数