我有以下数据帧:
period symptoms recovery
1 4 2
1 5 2
1 6 2
2 3 1
2 5 2
2 8 4
2 12 6
3 4 2
3 5 2
3 6 3
3 8 5
4 5 2
4 8 4
4 12 6
我试图找到df['period']组(1,2,3,4)基于值的共同值"症状"one_answers"恢复"两列
结果应该是:
symptoms recovery period
5 2 [1, 2, 3, 4]
8 4 [2, 4]
,其中每个相同的两个列值在列表或列中出现的句点。
我处理问题的方式不对吗?谢谢你的帮助。
我试图将每个周期转换为字典并循环查找值,但对我不起作用。还尝试使用grouby().apply(),但我没有得到有意义的数据帧。尝试基于3列排序值,但无法获得每个周期部分之间的共同值。最后一次尝试:
df2 = df[['period', 'how_long', 'days_to_ex']].copy()
#s = df.groupby(["period", "symptoms", "recovery"]).size()
s = df.groupby(["symptoms", "recovery"]).size()
你就快到了:
from io import StringIO
import pandas as pd
# setup sample data
data = StringIO("""
period;symptoms;recovery
1;4;2
1;5;2
1;6;2
2;3;1
2;5;2
2;8;4
2;12;6
3;4;2
3;5;2
3;6;3
3;8;5
4;5;2
4;8;4
4;12;6
""")
df = pd.read_csv(data, sep=";")
# collect unique periods
df.groupby(['symptoms','recovery'])[['period']].agg(list).reset_index()
这给
symptoms recovery period
0 3 1 [2]
1 4 2 [1, 3]
2 5 2 [1, 2, 3, 4]
3 6 2 [1]
4 6 3 [3]
5 8 4 [2, 4]
6 8 5 [3]
7 12 6 [2, 4]