【问题标题】:Groupby by a column and select specifc value from other column in pandas dataframe按列分组并从熊猫数据框中的另一列中选择特定值
【发布时间】:2021-05-21 08:57:16
【问题描述】:

输入数据框:

+-------------------------------+
|ID        Owns_car    owns_bike|
+-------------------------------+
| 1          1               0  |
| 5          1               0  |
| 7          0               1  |
| 1          1               0  |
| 4          1               0  |
| 5          0               1  |
| 7          0               1  |
+-------------------------------+


Expected Output: 
+------------------------------+
|ID       Owns_car    owns_bike|
+------------------------------+
| 1          1               0 |
| 5          1               1 |
| 7          0               1 |
| 4          1               0 |
+------------------------------+

按 ID 分组,然后为其他列选择值 '1' 而不是 0。检查给定 ID 的人是否拥有汽车和自行车

【问题讨论】:

    标签: python pandas dataframe pandas-groupby


    【解决方案1】:

    您可以在 groupby 之后使用 'max' 来选择最大值(优先选择 1 而不是 0)

    df = pd.DataFrame({'ID': [1, 5, 7, 1, 4, 5, 7],
                       'Owns_car': [1, 1, 0, 1, 1, 0, 0],
                       'owns_bike': [0, 0, 1, 0, 0, 1, 1]})
    df.groupby('ID').max().reset_index()
    

    【讨论】:

    • 嘿,@edhaussy 感谢您的回答,但是如果上面提到的还有其他列,我想要那些其他列,而不应用“max”操作。关于如何实现它的任何想法??
    • 您可以使用 'agg' 函数为您要保留的每一列应用不同的操作df.groupby('ID').agg({'Owns_car': 'max', 'owns_bike': 'max'})
    • 如果我想在不应用任何操作的情况下保持另一列不变,如何以这种方式保留一列?
    【解决方案2】:

    transformmax 一起使用,然后通过ID 删除重复项

    df[['Owns_car', 'owns_bike']] = df.groupby('ID')[['Owns_car', 'owns_bike']].transform('max')
    
    df = df.drop_duplicates('ID')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-04
      • 2015-07-30
      • 2015-03-29
      • 2019-02-10
      • 2022-07-14
      • 1970-01-01
      • 2015-12-03
      • 2019-06-29
      相关资源
      最近更新 更多