Python数据框:根据特定条件合并列的值

时间:2018-11-02 11:10:52

标签: python pandas list dataframe

嗨,我有一个数据框问题。可以说我有一个像这样的数据框

label    value 
1        a
1        b 
2  
2 
1        c
1        d

因此,我现在具有标签1的两个连续部分。我想要这样的输出:

output: [ab,cd] 

将不同区域的标签1的哪些相关值合并在一起。谢谢。

4 个答案:

答案 0 :(得分:1)

您可以使用itertools.groupby,它只会对相邻的项目进行分组:

from itertools import groupby
from operator import itemgetter

zipper = zip(df['label'], df['value'])
grouper = groupby(list(zipper), key=itemgetter(0))
res = [''.join(map(itemgetter(1), j)) for i, j in grouper if i == 1]

['ab', 'cd']

答案 1 :(得分:0)

您可以根据以下两个连续标签“ 1”的条件尝试对value中的值求和:

>> df['label'] = df['label'].astype(str)

>> res = df + df.shift(-1)

  label value
0    11    ab
1    12   NaN
2    22   NaN
3    21   NaN
4    11    cd
5   NaN   NaN

然后,我们仅在res匹配label'11'的行中进行过滤:

>> res[res['label'].eq('11')]['value'].values.tolist()

['ab', 'cd']

答案 2 :(得分:0)

您可以尝试

->按标签序列对数据框进行分组并添加分组值

->按标签对数据框进行分组,以获取单个ID信息作为列表

考虑的数据框

    label   value
0   1   a
1   1   b
2   2   NaN
3   2   NaN
4   1   c
5   1   d
6   1   e
7   3   b
8   3   c

#grouping the dataframe by label sequence checking with the previous value
df['value1'] = df.groupby(df.label.diff(1).abs().cumsum().fillna(0)).transform(sum)['value']

0    4.0
1    4.0
2    3.0
3    3.0
4    2.0
5    2.0
6    2.0
7    0.0
8    0.0

#group the dataframe by label to get individual ids information as list
df.groupby(df.label).apply(lambda x: x['value1'].unique())

出局:

      label
1    [ab, cde]
2        [0.0]
3         [bc]
dtype: object

答案 3 :(得分:-1)

使用熊猫,您可以按label过滤数据框。然后将GroupBy与使用cumsum构造的石斑鱼系列一起使用:

grouper = df['label'].ne(df['label'].shift()).cumsum()

res = df.loc[df['label'] == 1]\
        .groupby(grouper)['value'].sum().tolist()

['ab', 'cd']