简体   繁体   English

熊猫agg的功能取决于呼叫定义的不同行为

[英]Pandas agg function different behaviours depending on call definition

I don't understand the agg behaviour. 我不了解agg行为。 See examples below and expected result. 请参阅以下示例和预期结果。

pd.DataFrame({'d': [{'a': 1}, {'b': 2}]}).agg(list)
Out[372]: 
          d
0  {'a': 1}
1  {'b': 2}
pd.DataFrame({'d': [{'a': 1}, {'b': 2}]}).agg(lambda col: list(col))
Out[373]: 
          d
0  {'a': 1}
1  {'b': 2}
pd.DataFrame({'d': [{'a': 1}, {'b': 2}]}).agg({'d': list})
Out[374]: 
     d
0  [a]
1  [b]
pd.DataFrame({'d': [{'a': 1}, {'b': 2}]}).agg({'d': lambda col: list(col)})
Out[375]: 
     d
0  [a]
1  [b]

Expected result is: 预期结果是:

pd.DataFrame({'d': [list(pd.DataFrame({'d': [{'a': 1}, {'b': 2}]}).d)]})
Out[379]: 
                      d
0  [{'a': 1}, {'b': 2}]

You might need another DataFrame : 您可能需要另一个DataFrame

>>> df = pd.DataFrame({'d': [{'a': 1}, {'b': 2}]})
>>> pd.DataFrame([df.values], columns=df.columns)
                          d
0  [[{'a': 1}], [{'b': 2}]]
>>> 

agg isn't able to do that, it aggregates and does X operation on Y column, it doesn't "aggregate" values... agg无法做到这一点,它会聚合并对Y列执行X操作,它不会“聚合”值...

For your other example, I would do: 对于另一个示例,我将这样做:

>>> pd.DataFrame(df.apply(lambda x: [df[x.name].values])).T.apply(lambda x: x.str[0])
                      d                     e
0  [{'a': 1}, {'b': 2}]  [{'a': 1}, {'b': 2}]
>>> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM