gpt4 book ai didi

python - 将一行分布在共享相同键的其他行上

转载 作者:行者123 更新时间:2023-12-01 06:36:44 24 4
gpt4 key购买 nike

我有一个如下所示的数据框:

+------+------------+-------+--------------+
| name | date | value | replacement |
+------+------------+-------+--------------+
| A | 20/11/2016 | 10 | NaN |
| C | 20/11/2016 | 8 | [A,B] |
| B | 20/11/2016 | 12 | NaN |
| E | 25/12/2016 | 16 | NaN |
| F | 25/12/2016 | 18 | NaN |
| D | 25/12/2016 | 11 | [E,F] |
+------+------------+-------+--------------+

我想做的事:
对于列 'replacement' 中具有名称列表的每一行,我希望其 'value' 均匀分布在包含这些替换的行上 +同一日期。
对于前面的示例,输出将如下所示:

+------+------------+-------+------------------+
| name | date | value | additional value |
+------+------------+-------+------------------+
| A | 20/11/2016 | 10 | 4 |
| B | 20/11/2016 | 12 | 4 |
| A | 25/12/2016 | 16 | 5.5 |
| B | 25/12/2016 | 18 | 5.5 |
+------+------------+-------+------------------+

我设法找到一种方法来直接执行分配,而无需通过拆分这些行并按名称+日期分组来创建新列,但是 1/太慢了 + 2/我确实需要创建该附加列并且可以'没有找到一种方法来做到这一点。

最佳答案

想法是通过 Series.str.len替换列表的长度创建新列然后DataFrame.explode (pandas 0.25+)将它们转换为标量。将列 value 除以 newmerge按原始与其他列名称添加原始列:

df1 = df.assign(new=df['replacement'].str.len()).explode('replacement')
df1['new'] = df1['value'].div(df1['new'])

df1 = df1[['name','date','value']].merge(df1[['replacement','date','new']],
left_on=['name','date'],
right_on=['replacement','date'])
df1['replacement'] = df1.pop('new')
print (df1)
name date value replacement
0 A 20/11/2016 10 4.0
1 B 20/11/2016 12 4.0
2 A 25/12/2016 16 5.5
3 B 25/12/2016 18 5.5

类似的解决方案,通过删除而不是选择:

df1 = df.assign(new=df['replacement'].str.len()).explode('replacement')
df1['new'] = df1['value'].div(df1['new'])

df1 = df1.drop(['replacement','new'],1).merge(df1.drop(['name','value'],1),
left_on=['name','date'],
right_on=['replacement','date'])
df1['replacement'] = df1.pop('new')
print (df1)
name date value replacement
0 A 20/11/2016 10 4.0
1 B 20/11/2016 12 4.0
2 A 25/12/2016 16 5.5
3 B 25/12/2016 18 5.5

关于python - 将一行分布在共享相同键的其他行上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59630237/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com