Python DataFrame:根据条件映射两列?

时间:2020-07-28 20:34:51

标签: python pandas numpy dataframe

我有一个包含三列nonamedate的df。如果nodate匹配,它们的值将在output列中添加到列表中。

例如:1234和2从0行和1行匹配-所以[a,b]

如果nodate不匹配,则将相同的name值添加到列表中

      no       name   date

0   1234        a       2

1   1234        b       2

2   1234        c       3

3   456         d       1

4   456         e       2  

5   789         f       5

结果输出。

      no       name   date    output

0   1234        a       2     [a,b]

1   1234        b       2     [a,b]

2   1234        c       3      [c]

3   456         d       1      [d]

4   456         e       2      [e]

5   789         f       5      [f]

2 个答案:

答案 0 :(得分:1)

您可以尝试 import Modal from 'react-native-modal' const modalRef = React.createRef(); const modal = <Modal ref={modalRef} isVisible={false}> <ModalController modal={modalRef} /> export const ModalController = ({modal}) => { function onButtonPress(){ modal.setState({isVisible:true}) modal.setNativeProps({isVisible:true}) } return ( <Button title='Show Modal' onPress={onButtonPress()} /> ) } 来获取groupby.agg(list)no的每种组合的列表,然后date进行分配:

merge

输出:

df.merge(df.groupby(['no','date'])['name']
           .agg(list).rename('output'),
         on=['no', 'date']
        )

答案 1 :(得分:1)

另一种解决方案是将groupbytransformsumlist组合在一起。不过,您必须了解一下性能。

df['output'] = df.groupby(['no', 'date'])['name'].transform(sum).apply(list)

     no name date  output
0  1234    a    2  [a, b]
1  1234    b    2  [a, b]
2  1234    c    3     [c]
3   456    d    1     [d]
4   456    e    2     [e]
5   789    f    5     [f]